]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
net: asix: fix fortify warning
authorDmitry Antipov <dmantipov@yandex.ru>
Mon, 11 Dec 2023 09:05:32 +0000 (12:05 +0300)
committerJakub Kicinski <kuba@kernel.org>
Tue, 12 Dec 2023 21:20:37 +0000 (13:20 -0800)
When compiling with gcc version 14.0.0 20231129 (experimental) and
CONFIG_FORTIFY_SOURCE=y, I've noticed the following warning:

...
In function 'fortify_memcpy_chk',
    inlined from 'ax88796c_tx_fixup' at drivers/net/ethernet/asix/ax88796c_main.c:287:2:
./include/linux/fortify-string.h:588:25: warning: call to '__read_overflow2_field'
declared with attribute warning: detected read beyond size of field (2nd parameter);
maybe use struct_group()? [-Wattribute-warning]
  588 |                         __read_overflow2_field(q_size_field, size);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...

This call to 'memcpy()' is interpreted as an attempt to copy TX_OVERHEAD
(which is 8) bytes from 4-byte 'sop' field of 'struct tx_pkt_info' and
thus overread warning is issued. Since we actually want to copy both
'sop' and 'seg' fields at once, use the convenient 'struct_group()' here.

Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
Acked-by: Ɓukasz Stelmach <l.stelmach@samsung.com>
Link: https://lore.kernel.org/r/20231211090535.9730-1-dmantipov@yandex.ru
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/asix/ax88796c_main.c
drivers/net/ethernet/asix/ax88796c_main.h

index e551ffaed20d5abb88cac7446b1517a9ec135129..11e8996b33d77e23d830dfd88221bc3df54e1fb6 100644 (file)
@@ -284,7 +284,7 @@ ax88796c_tx_fixup(struct net_device *ndev, struct sk_buff_head *q)
        ax88796c_proc_tx_hdr(&info, skb->ip_summed);
 
        /* SOP and SEG header */
-       memcpy(skb_push(skb, TX_OVERHEAD), &info.sop, TX_OVERHEAD);
+       memcpy(skb_push(skb, TX_OVERHEAD), &info.tx_overhead, TX_OVERHEAD);
 
        /* Write SPI TXQ header */
        memcpy(skb_push(skb, spi_len), ax88796c_tx_cmd_buf, spi_len);
index 4a83c991dcbedc3e7a65660b2e1e456a2f4c4519..68a09edecab814329f025bd651e3c66832584bab 100644 (file)
@@ -25,7 +25,7 @@
 #define AX88796C_PHY_REGDUMP_LEN       14
 #define AX88796C_PHY_ID                        0x10
 
-#define TX_OVERHEAD                    8
+#define TX_OVERHEAD     sizeof_field(struct tx_pkt_info, tx_overhead)
 #define TX_EOP_SIZE                    4
 
 #define AX_MCAST_FILTER_SIZE           8
@@ -549,8 +549,10 @@ struct tx_eop_header {
 };
 
 struct tx_pkt_info {
-       struct tx_sop_header sop;
-       struct tx_segment_header seg;
+       struct_group(tx_overhead,
+               struct tx_sop_header sop;
+               struct tx_segment_header seg;
+       );
        struct tx_eop_header eop;
        u16 pkt_len;
        u16 seq_num;