* [PATCH 0/2] wifi: ath: false-positive fortified-memset warnings @ 2024-03-28 13:55 Arnd Bergmann 2024-03-28 13:55 ` [PATCH 1/2] [RESEND] wifi: carl9170: re-fix fortified-memset warning Arnd Bergmann 2024-03-28 13:55 ` [PATCH 2/2] wifi: ath9k: work around memset overflow warning Arnd Bergmann 0 siblings, 2 replies; 8+ messages in thread From: Arnd Bergmann @ 2024-03-28 13:55 UTC (permalink / raw) To: Kees Cook Cc: linux-hardening, Toke Høiland-Jørgensen, linux-wireless, Kalle Valo, Arnd Bergmann From: Arnd Bergmann <arnd@arndb.de> While testing some other patch series I worked on across gcc versions, I found a couple of stringop warnings that only show up with some toolchains but not others. The warnings I both seem to be false positive. I have also not found an explanation why both of these happen in atheros wireless drivers, as I don't see this in other drivers. Maybe Kees can work out what is going on here. Arnd Bergmann (2): [RESEND] carl9170: re-fix fortified-memset warning ath9k: work around memset overflow warning drivers/net/wireless/ath/ath.h | 6 ++++-- drivers/net/wireless/ath/ath9k/main.c | 3 +-- drivers/net/wireless/ath/carl9170/tx.c | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) -- 2.39.2 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] [RESEND] wifi: carl9170: re-fix fortified-memset warning 2024-03-28 13:55 [PATCH 0/2] wifi: ath: false-positive fortified-memset warnings Arnd Bergmann @ 2024-03-28 13:55 ` Arnd Bergmann 2024-03-28 21:51 ` Kees Cook ` (2 more replies) 2024-03-28 13:55 ` [PATCH 2/2] wifi: ath9k: work around memset overflow warning Arnd Bergmann 1 sibling, 3 replies; 8+ messages in thread From: Arnd Bergmann @ 2024-03-28 13:55 UTC (permalink / raw) To: Kees Cook, Christian Lamparter, Kalle Valo, Johannes Berg Cc: linux-hardening, Toke Høiland-Jørgensen, linux-wireless, Arnd Bergmann, Colin Ian King, linux-kernel From: Arnd Bergmann <arnd@arndb.de> The carl9170_tx_release() function sometimes triggers a fortified-memset warning in my randconfig builds: In file included from include/linux/string.h:254, from drivers/net/wireless/ath/carl9170/tx.c:40: In function 'fortify_memset_chk', inlined from 'carl9170_tx_release' at drivers/net/wireless/ath/carl9170/tx.c:283:2, inlined from 'kref_put' at include/linux/kref.h:65:3, inlined from 'carl9170_tx_put_skb' at drivers/net/wireless/ath/carl9170/tx.c:342:9: include/linux/fortify-string.h:493:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning] 493 | __write_overflow_field(p_size_field, size); Kees previously tried to avoid this by using memset_after(), but it seems this does not fully address the problem. I noticed that the memset_after() here is done on a different part of the union (status) than the original cast was from (rate_driver_data), which may confuse the compiler. Unfortunately, the memset_after() trick does not work on driver_rates[] because that is part of an anonymous struct, and I could not get struct_group() to do this either. Using two separate memset() calls on the two members does address the warning though. Fixes: fb5f6a0e8063b ("mac80211: Use memset_after() to clear tx status") Link: https://lore.kernel.org/lkml/20230623152443.2296825-1-arnd@kernel.org/ Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- I found this while testing randconfig builds, a .config that shows this for me is at https://pastebin.com/yWFKvZYu Sorry I failed to follow up to Kees' request for a reproducer when I posted this last year. --- drivers/net/wireless/ath/carl9170/tx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/carl9170/tx.c b/drivers/net/wireless/ath/carl9170/tx.c index e902ca80eba7..0226c31a6cae 100644 --- a/drivers/net/wireless/ath/carl9170/tx.c +++ b/drivers/net/wireless/ath/carl9170/tx.c @@ -280,7 +280,8 @@ static void carl9170_tx_release(struct kref *ref) * carl9170_tx_fill_rateinfo() has filled the rate information * before we get to this point. */ - memset_after(&txinfo->status, 0, rates); + memset(&txinfo->pad, 0, sizeof(txinfo->pad)); + memset(&txinfo->rate_driver_data, 0, sizeof(txinfo->rate_driver_data)); if (atomic_read(&ar->tx_total_queued)) ar->tx_schedule = true; -- 2.39.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] [RESEND] wifi: carl9170: re-fix fortified-memset warning 2024-03-28 13:55 ` [PATCH 1/2] [RESEND] wifi: carl9170: re-fix fortified-memset warning Arnd Bergmann @ 2024-03-28 21:51 ` Kees Cook 2024-03-29 12:56 ` Christian Lamparter 2024-04-04 10:10 ` Kalle Valo 2 siblings, 0 replies; 8+ messages in thread From: Kees Cook @ 2024-03-28 21:51 UTC (permalink / raw) To: Arnd Bergmann Cc: Christian Lamparter, Kalle Valo, Johannes Berg, linux-hardening, Toke Høiland-Jørgensen, linux-wireless, Arnd Bergmann, Colin Ian King, linux-kernel On Thu, Mar 28, 2024 at 02:55:04PM +0100, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > The carl9170_tx_release() function sometimes triggers a fortified-memset > warning in my randconfig builds: > > In file included from include/linux/string.h:254, > from drivers/net/wireless/ath/carl9170/tx.c:40: > In function 'fortify_memset_chk', > inlined from 'carl9170_tx_release' at drivers/net/wireless/ath/carl9170/tx.c:283:2, > inlined from 'kref_put' at include/linux/kref.h:65:3, > inlined from 'carl9170_tx_put_skb' at drivers/net/wireless/ath/carl9170/tx.c:342:9: > include/linux/fortify-string.h:493:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning] > 493 | __write_overflow_field(p_size_field, size); > > Kees previously tried to avoid this by using memset_after(), but it seems > this does not fully address the problem. I noticed that the memset_after() > here is done on a different part of the union (status) than the original > cast was from (rate_driver_data), which may confuse the compiler. > > Unfortunately, the memset_after() trick does not work on driver_rates[] > because that is part of an anonymous struct, and I could not get > struct_group() to do this either. Using two separate memset() calls > on the two members does address the warning though. > > Fixes: fb5f6a0e8063b ("mac80211: Use memset_after() to clear tx status") > Link: https://lore.kernel.org/lkml/20230623152443.2296825-1-arnd@kernel.org/ > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Kees Cook <keescook@chromium.org> -- Kees Cook ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] [RESEND] wifi: carl9170: re-fix fortified-memset warning 2024-03-28 13:55 ` [PATCH 1/2] [RESEND] wifi: carl9170: re-fix fortified-memset warning Arnd Bergmann 2024-03-28 21:51 ` Kees Cook @ 2024-03-29 12:56 ` Christian Lamparter 2024-04-04 10:10 ` Kalle Valo 2 siblings, 0 replies; 8+ messages in thread From: Christian Lamparter @ 2024-03-29 12:56 UTC (permalink / raw) To: Arnd Bergmann, Kees Cook, Kalle Valo, Johannes Berg Cc: linux-hardening, Toke Høiland-Jørgensen, linux-wireless, Arnd Bergmann, Colin Ian King, linux-kernel On 3/28/24 2:55 PM, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > The carl9170_tx_release() function sometimes triggers a fortified-memset > warning in my randconfig builds: > > In file included from include/linux/string.h:254, > from drivers/net/wireless/ath/carl9170/tx.c:40: > In function 'fortify_memset_chk', > inlined from 'carl9170_tx_release' at drivers/net/wireless/ath/carl9170/tx.c:283:2, > inlined from 'kref_put' at include/linux/kref.h:65:3, > inlined from 'carl9170_tx_put_skb' at drivers/net/wireless/ath/carl9170/tx.c:342:9: > include/linux/fortify-string.h:493:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning] > 493 | __write_overflow_field(p_size_field, size); > > Kees previously tried to avoid this by using memset_after(), but it seems > this does not fully address the problem. I noticed that the memset_after() > here is done on a different part of the union (status) than the original > cast was from (rate_driver_data), which may confuse the compiler. > > Unfortunately, the memset_after() trick does not work on driver_rates[] > because that is part of an anonymous struct, and I could not get > struct_group() to do this either. Using two separate memset() calls > on the two members does address the warning though. > > Fixes: fb5f6a0e8063b ("mac80211: Use memset_after() to clear tx status") > Link: https://lore.kernel.org/lkml/20230623152443.2296825-1-arnd@kernel.org/ > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Sure... though I think AI-supported compilers will in the future nag about this again. Oh well! Acked-by: Christian Lamparter <chunkeey@gmail.com> > --- > I found this while testing randconfig builds, a .config that shows this > for me is at https://pastebin.com/yWFKvZYu > > Sorry I failed to follow up to Kees' request for a reproducer when > I posted this last year. > --- > drivers/net/wireless/ath/carl9170/tx.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/wireless/ath/carl9170/tx.c b/drivers/net/wireless/ath/carl9170/tx.c > index e902ca80eba7..0226c31a6cae 100644 > --- a/drivers/net/wireless/ath/carl9170/tx.c > +++ b/drivers/net/wireless/ath/carl9170/tx.c > @@ -280,7 +280,8 @@ static void carl9170_tx_release(struct kref *ref) > * carl9170_tx_fill_rateinfo() has filled the rate information > * before we get to this point. > */ > - memset_after(&txinfo->status, 0, rates); > + memset(&txinfo->pad, 0, sizeof(txinfo->pad)); > + memset(&txinfo->rate_driver_data, 0, sizeof(txinfo->rate_driver_data)); ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] [RESEND] wifi: carl9170: re-fix fortified-memset warning 2024-03-28 13:55 ` [PATCH 1/2] [RESEND] wifi: carl9170: re-fix fortified-memset warning Arnd Bergmann 2024-03-28 21:51 ` Kees Cook 2024-03-29 12:56 ` Christian Lamparter @ 2024-04-04 10:10 ` Kalle Valo 2 siblings, 0 replies; 8+ messages in thread From: Kalle Valo @ 2024-04-04 10:10 UTC (permalink / raw) To: Arnd Bergmann Cc: Kees Cook, Christian Lamparter, Johannes Berg, linux-hardening, Toke Høiland-Jørgensen, linux-wireless, Arnd Bergmann, Colin Ian King, linux-kernel Arnd Bergmann <arnd@kernel.org> wrote: > The carl9170_tx_release() function sometimes triggers a fortified-memset > warning in my randconfig builds: > > In file included from include/linux/string.h:254, > from drivers/net/wireless/ath/carl9170/tx.c:40: > In function 'fortify_memset_chk', > inlined from 'carl9170_tx_release' at drivers/net/wireless/ath/carl9170/tx.c:283:2, > inlined from 'kref_put' at include/linux/kref.h:65:3, > inlined from 'carl9170_tx_put_skb' at drivers/net/wireless/ath/carl9170/tx.c:342:9: > include/linux/fortify-string.h:493:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning] > 493 | __write_overflow_field(p_size_field, size); > > Kees previously tried to avoid this by using memset_after(), but it seems > this does not fully address the problem. I noticed that the memset_after() > here is done on a different part of the union (status) than the original > cast was from (rate_driver_data), which may confuse the compiler. > > Unfortunately, the memset_after() trick does not work on driver_rates[] > because that is part of an anonymous struct, and I could not get > struct_group() to do this either. Using two separate memset() calls > on the two members does address the warning though. > > Fixes: fb5f6a0e8063b ("mac80211: Use memset_after() to clear tx status") > Link: https://lore.kernel.org/lkml/20230623152443.2296825-1-arnd@kernel.org/ > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > Reviewed-by: Kees Cook <keescook@chromium.org> > Acked-by: Christian Lamparter <chunkeey@gmail.com> > Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> 2 patches applied to ath-next branch of ath.git, thanks. 066afafc10c9 wifi: carl9170: re-fix fortified-memset warning 61752ac69b69 wifi: ath9k: work around memset overflow warning -- https://patchwork.kernel.org/project/linux-wireless/patch/20240328135509.3755090-2-arnd@kernel.org/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] wifi: ath9k: work around memset overflow warning 2024-03-28 13:55 [PATCH 0/2] wifi: ath: false-positive fortified-memset warnings Arnd Bergmann 2024-03-28 13:55 ` [PATCH 1/2] [RESEND] wifi: carl9170: re-fix fortified-memset warning Arnd Bergmann @ 2024-03-28 13:55 ` Arnd Bergmann 2024-03-28 21:14 ` Toke Høiland-Jørgensen 2024-03-28 21:50 ` Kees Cook 1 sibling, 2 replies; 8+ messages in thread From: Arnd Bergmann @ 2024-03-28 13:55 UTC (permalink / raw) To: Kees Cook, Kalle Valo, Toke Høiland-Jørgensen Cc: linux-hardening, linux-wireless, Arnd Bergmann, Jeff Johnson, Dmitry Antipov, Hancheng Yang, Remi Pommarel, Johannes Berg, linux-kernel From: Arnd Bergmann <arnd@arndb.de> gcc-9 and some other older versions produce a false-positive warning for zeroing two fields In file included from include/linux/string.h:369, from drivers/net/wireless/ath/ath9k/main.c:18: In function 'fortify_memset_chk', inlined from 'ath9k_ps_wakeup' at drivers/net/wireless/ath/ath9k/main.c:140:3: include/linux/fortify-string.h:462:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning] 462 | __write_overflow_field(p_size_field, size); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Using a struct_group seems to reliably avoid the warning and not make the code much uglier. The combined memset() should even save a couple of cpu cycles. Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- This is from randconfig testing, see https://pastebin.com/yjKk5N81 for a reproducer --- drivers/net/wireless/ath/ath.h | 6 ++++-- drivers/net/wireless/ath/ath9k/main.c | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/ath/ath.h b/drivers/net/wireless/ath/ath.h index f02a308a9ffc..34654f710d8a 100644 --- a/drivers/net/wireless/ath/ath.h +++ b/drivers/net/wireless/ath/ath.h @@ -171,8 +171,10 @@ struct ath_common { unsigned int clockrate; spinlock_t cc_lock; - struct ath_cycle_counters cc_ani; - struct ath_cycle_counters cc_survey; + struct_group(cc, + struct ath_cycle_counters cc_ani; + struct ath_cycle_counters cc_survey; + ); struct ath_regulatory regulatory; struct ath_regulatory reg_world_copy; diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index a2943aaecb20..01173aac3045 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -135,8 +135,7 @@ void ath9k_ps_wakeup(struct ath_softc *sc) if (power_mode != ATH9K_PM_AWAKE) { spin_lock(&common->cc_lock); ath_hw_cycle_counters_update(common); - memset(&common->cc_survey, 0, sizeof(common->cc_survey)); - memset(&common->cc_ani, 0, sizeof(common->cc_ani)); + memset(&common->cc, 0, sizeof(common->cc)); spin_unlock(&common->cc_lock); } -- 2.39.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] wifi: ath9k: work around memset overflow warning 2024-03-28 13:55 ` [PATCH 2/2] wifi: ath9k: work around memset overflow warning Arnd Bergmann @ 2024-03-28 21:14 ` Toke Høiland-Jørgensen 2024-03-28 21:50 ` Kees Cook 1 sibling, 0 replies; 8+ messages in thread From: Toke Høiland-Jørgensen @ 2024-03-28 21:14 UTC (permalink / raw) To: Arnd Bergmann, Kees Cook, Kalle Valo Cc: linux-hardening, linux-wireless, Arnd Bergmann, Jeff Johnson, Dmitry Antipov, Hancheng Yang, Remi Pommarel, Johannes Berg, linux-kernel Arnd Bergmann <arnd@kernel.org> writes: > From: Arnd Bergmann <arnd@arndb.de> > > gcc-9 and some other older versions produce a false-positive warning > for zeroing two fields > > In file included from include/linux/string.h:369, > from drivers/net/wireless/ath/ath9k/main.c:18: > In function 'fortify_memset_chk', > inlined from 'ath9k_ps_wakeup' at drivers/net/wireless/ath/ath9k/main.c:140:3: > include/linux/fortify-string.h:462:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning] > 462 | __write_overflow_field(p_size_field, size); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > Using a struct_group seems to reliably avoid the warning and > not make the code much uglier. The combined memset() should even > save a couple of cpu cycles. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Toke Høiland-Jørgensen <toke@toke.dk> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] wifi: ath9k: work around memset overflow warning 2024-03-28 13:55 ` [PATCH 2/2] wifi: ath9k: work around memset overflow warning Arnd Bergmann 2024-03-28 21:14 ` Toke Høiland-Jørgensen @ 2024-03-28 21:50 ` Kees Cook 1 sibling, 0 replies; 8+ messages in thread From: Kees Cook @ 2024-03-28 21:50 UTC (permalink / raw) To: Arnd Bergmann Cc: Kalle Valo, Toke Høiland-Jørgensen, linux-hardening, linux-wireless, Arnd Bergmann, Jeff Johnson, Dmitry Antipov, Hancheng Yang, Remi Pommarel, Johannes Berg, linux-kernel On Thu, Mar 28, 2024 at 02:55:05PM +0100, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > gcc-9 and some other older versions produce a false-positive warning > for zeroing two fields > > In file included from include/linux/string.h:369, > from drivers/net/wireless/ath/ath9k/main.c:18: > In function 'fortify_memset_chk', > inlined from 'ath9k_ps_wakeup' at drivers/net/wireless/ath/ath9k/main.c:140:3: > include/linux/fortify-string.h:462:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning] > 462 | __write_overflow_field(p_size_field, size); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > Using a struct_group seems to reliably avoid the warning and > not make the code much uglier. The combined memset() should even > save a couple of cpu cycles. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Kees Cook <keescook@chromium.org> -- Kees Cook ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-04-04 10:10 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-03-28 13:55 [PATCH 0/2] wifi: ath: false-positive fortified-memset warnings Arnd Bergmann 2024-03-28 13:55 ` [PATCH 1/2] [RESEND] wifi: carl9170: re-fix fortified-memset warning Arnd Bergmann 2024-03-28 21:51 ` Kees Cook 2024-03-29 12:56 ` Christian Lamparter 2024-04-04 10:10 ` Kalle Valo 2024-03-28 13:55 ` [PATCH 2/2] wifi: ath9k: work around memset overflow warning Arnd Bergmann 2024-03-28 21:14 ` Toke Høiland-Jørgensen 2024-03-28 21:50 ` Kees Cook
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.