Re: [PATCH] wifi: iwlwifi: mld: Work around Clang loop unrolling bug

From: Nathan Chancellor
Date: Fri Apr 25 2025 - 19:14:32 EST


On Fri, Apr 25, 2025 at 11:18:33AM -0700, Kees Cook wrote:
> On Tue, Apr 22, 2025 at 12:59:03PM -0700, Nathan Chancellor wrote:
> > $ git cite
> > a33b5a08cbbd ("Merge tag 'sched_ext-for-6.15-rc3-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext")
>
> Make me look. :) "cite" is a local alias, yes? Looks like my own alias
> for "short", but basically "short HEAD". From my ~/.gitconfig:
>
> [alias]
> short = "!f() { for i in \"$@\"; do git log -1 --pretty='%h (\"%s\")' \"$i\"; done; }; f"

Heh, yes, that was me being lazy :) 'cite' ultimately expands to

show --format='%h ("%s")' --no-patch

to basically do what yours does.

$ git cite HEAD~2 HEAD^ HEAD
e72e9e693307 ("Merge tag 'net-6.15-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net")
30e268185e59 ("Merge tag 'landlock-6.15-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/mic/linux")
02ddfb981de8 ("Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi")

> > diff --git a/drivers/net/wireless/intel/iwlwifi/mld/d3.c b/drivers/net/wireless/intel/iwlwifi/mld/d3.c
> > index fba6a7b1bb5c..7ce01ad3608e 100644
> > --- a/drivers/net/wireless/intel/iwlwifi/mld/d3.c
> > +++ b/drivers/net/wireless/intel/iwlwifi/mld/d3.c
> > @@ -1757,7 +1757,7 @@ iwl_mld_send_proto_offload(struct iwl_mld *mld,
> >
> > addrconf_addr_solict_mult(&wowlan_data->target_ipv6_addrs[i],
> > &solicited_addr);
> > - for (j = 0; j < c && j < n_nsc; j++)
> > + for (j = 0; j < n_nsc && j < c; j++)
> > if (ipv6_addr_cmp(&nsc[j].dest_ipv6_addr,
> > &solicited_addr) == 0)
> > break;
>
> Oof, an unstable solution. Well, I guess we work with what we've got.
> Your change also solves it for me, so I'll send a v2 with it that way.

Indeed... I will review v2 shortly but another option would be stick a

#include <linux/unroll.h>

#ifdef CONFIG_CC_IS_CLANG
unrolled_none
#endif

above the loop to just avoid tripping the optimizer up altogether but I
understand that is just as unstable as this one (even if it is one of
the few ways that the compiler gives us to turn off optimizations).

Cheers,
Nathan