wifi: mac80211: fix off-by-one link setting
authorJohannes Berg <johannes.berg@intel.com>
Tue, 14 Feb 2023 19:08:15 +0000 (20:08 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Mar 2023 08:33:05 +0000 (09:33 +0100)
[ Upstream commit cf08e29db760b144bde51e2444f3430c75763e26 ]

The convention for find_first_bit() is 0-based, while ffs()
is 1-based, so this is now off-by-one. I cannot reproduce the
gcc-9 problem, but since the -1 is now removed, I'm hoping it
will still avoid the original issue.

Reported-by: Alexander Lobakin <alexandr.lobakin@intel.com>
Fixes: 1d8d4af43474 ("wifi: mac80211: avoid u32_encode_bits() warning")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/mac80211/tx.c

index 55220e7..6a1708d 100644 (file)
@@ -4395,7 +4395,7 @@ static void ieee80211_mlo_multicast_tx(struct net_device *dev,
        u32 ctrl_flags = IEEE80211_TX_CTRL_MCAST_MLO_FIRST_TX;
 
        if (hweight16(links) == 1) {
-               ctrl_flags |= u32_encode_bits(find_first_bit(&links, 16) - 1,
+               ctrl_flags |= u32_encode_bits(__ffs(links),
                                              IEEE80211_TX_CTRL_MLO_LINK);
 
                __ieee80211_subif_start_xmit(skb, sdata->dev, 0, ctrl_flags,