]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: mac80211: do not check BSS color collision in certain cases
authorMichael-CY Lee <michael-cy.lee@mediatek.com>
Fri, 5 Jul 2024 07:43:46 +0000 (15:43 +0800)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 8 Jul 2024 16:28:47 +0000 (18:28 +0200)
Do not check BSS color collision in following cases
1. already under a color change
2. color change is disabled

Signed-off-by: Michael-CY Lee <michael-cy.lee@mediatek.com>
Link: https://patch.msgid.link/20240705074346.11228-1-michael-cy.lee@mediatek.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/rx.c

index 0ff9062a130cb7cca648df3aa8ae2f3bc66647e6..59ad24a71141f6dfbea06444a058fb6e639866de 100644 (file)
@@ -3358,6 +3358,7 @@ static void
 ieee80211_rx_check_bss_color_collision(struct ieee80211_rx_data *rx)
 {
        struct ieee80211_mgmt *mgmt = (void *)rx->skb->data;
+       struct ieee80211_bss_conf *bss_conf;
        const struct element *ie;
        size_t baselen;
 
@@ -3368,7 +3369,9 @@ ieee80211_rx_check_bss_color_collision(struct ieee80211_rx_data *rx)
        if (ieee80211_hw_check(&rx->local->hw, DETECTS_COLOR_COLLISION))
                return;
 
-       if (rx->link->conf->csa_active)
+       bss_conf = rx->link->conf;
+       if (bss_conf->csa_active || bss_conf->color_change_active ||
+           !bss_conf->he_bss_color.enabled)
                return;
 
        baselen = mgmt->u.beacon.variable - rx->skb->data;
@@ -3380,7 +3383,6 @@ ieee80211_rx_check_bss_color_collision(struct ieee80211_rx_data *rx)
                                    rx->skb->len - baselen);
        if (ie && ie->datalen >= sizeof(struct ieee80211_he_operation) &&
            ie->datalen >= ieee80211_he_oper_size(ie->data + 1)) {
-               struct ieee80211_bss_conf *bss_conf = rx->link->conf;
                const struct ieee80211_he_operation *he_oper;
                u8 color;