wifi: mac80211: fix check for unusable RX result
authorJohannes Berg <johannes.berg@intel.com>
Mon, 25 Sep 2023 15:24:39 +0000 (17:24 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 26 Sep 2023 07:16:11 +0000 (09:16 +0200)
If we just check "result & RX_DROP_UNUSABLE", this really only works
by accident, because SKB_DROP_REASON_SUBSYS_MAC80211_UNUSABLE got to
have the value 1, and SKB_DROP_REASON_SUBSYS_MAC80211_MONITOR is 2.

Fix this to really check the entire subsys mask for the value, so it
doesn't matter what the subsystem value is.

Fixes: 7f4e09700bdc ("wifi: mac80211: report all unusable beacon frames")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/drop.h
net/mac80211/rx.c

index 49dc809cab290c661a1380685ec80851ea7d2b1c..1570fac8411f4fa0464e368b7674da9019633a1c 100644 (file)
@@ -53,4 +53,7 @@ enum mac80211_drop_reason {
 #undef DEF
 };
 
+#define RX_RES_IS_UNUSABLE(result)     \
+       (((__force u32)(result) & SKB_DROP_REASON_SUBSYS_MASK) == ___RX_DROP_UNUSABLE)
+
 #endif /* MAC80211_DROP_H */
index 6fcd2a7179222bf5408030996ff7786a1237623b..944adc9a51f1497c4cc971ae478983519295b41d 100644 (file)
@@ -2112,7 +2112,7 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
        /* either the frame has been decrypted or will be dropped */
        status->flag |= RX_FLAG_DECRYPTED;
 
-       if (unlikely(ieee80211_is_beacon(fc) && (result & RX_DROP_UNUSABLE) &&
+       if (unlikely(ieee80211_is_beacon(fc) && RX_RES_IS_UNUSABLE(result) &&
                     rx->sdata->dev))
                cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev,
                                             skb->data, skb->len);