]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: fix one more memcpy size error
authorArnd Bergmann <arnd@arndb.de>
Fri, 4 Oct 2024 09:54:13 +0000 (09:54 +0000)
committerJeff Johnson <quic_jjohnson@quicinc.com>
Mon, 7 Oct 2024 21:07:36 +0000 (14:07 -0700)
A previous patch addressed a fortified-memcpy warning on older compilers,
but there is still a warning on gcc-14 in some configurations:

In file included from include/linux/string.h:390,
                 from drivers/net/wireless/ath/ath12k/wow.c:7:
drivers/net/wireless/ath/ath12k/wow.c: In function 'ath12k_wow_convert_8023_to_80211.isra':
include/linux/fortify-string.h:114:33: error: '__builtin_memcpy' accessing 18446744073709551610 or more bytes at offsets 0 and 0 overlaps 9223372036854775797 bytes at offset -9223372036854775803 [-Werror=restrict]
include/linux/fortify-string.h:679:26: note: in expansion of macro '__fortify_memcpy_chk'
  679 | #define memcpy(p, q, s)  __fortify_memcpy_chk(p, q, s,                  \
      |                          ^~~~~~~~~~~~~~~~~~~~
drivers/net/wireless/ath/ath12k/wow.c:199:25: note: in expansion of macro 'memcpy'
  199 |                         memcpy(pat + a3_ofs - pkt_ofs,
      |                         ^~~~~~

Address this the same way as the other two, using size_add().

Fixes: b49991d83bba ("wifi: ath12k: fix build vs old compiler")
Fixes: 4a3c212eee0e ("wifi: ath12k: add basic WoW functionalities")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Kalle Valo <kvalo@kernel.org>
Link: https://patch.msgid.link/20241004095420.637091-1-arnd@kernel.org
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
drivers/net/wireless/ath/ath12k/wow.c

index 9b8684abbe40aea8fc93f479ad0700f9a5871289..3624180b25b9706bb017aed62c64fa7a63719a9a 100644 (file)
@@ -191,7 +191,7 @@ ath12k_wow_convert_8023_to_80211(struct ath12k *ar,
                        memcpy(bytemask, eth_bytemask, eth_pat_len);
 
                        pat_len = eth_pat_len;
-               } else if (eth_pkt_ofs + eth_pat_len < prot_ofs) {
+               } else if (size_add(eth_pkt_ofs, eth_pat_len) < prot_ofs) {
                        memcpy(pat, eth_pat, ETH_ALEN - eth_pkt_ofs);
                        memcpy(bytemask, eth_bytemask, ETH_ALEN - eth_pkt_ofs);