wifi: mac80211: fix decap offload for stations on AP_VLAN interfaces
authorFelix Fietkau <nbd@nbd.name>
Sat, 1 Oct 2022 10:01:13 +0000 (12:01 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 7 Oct 2022 12:43:29 +0000 (14:43 +0200)
Since AP_VLAN interfaces are not passed to the driver, check offload_flags
on the bss vif instead.

Reported-by: Howard Hsu <howard-yh.hsu@mediatek.com>
Fixes: 80a915ec4427 ("mac80211: add rx decapsulation offload support")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/rx.c

index 333adad47482cd1b78bfdf1949d8ee513fe86c67..589521717c358168dff34cd4dac273246d5b7297 100644 (file)
@@ -4352,6 +4352,7 @@ void ieee80211_check_fast_rx(struct sta_info *sta)
                .vif_type = sdata->vif.type,
                .control_port_protocol = sdata->control_port_protocol,
        }, *old, *new = NULL;
+       u32 offload_flags;
        bool set_offload = false;
        bool assign = false;
        bool offload;
@@ -4467,10 +4468,10 @@ void ieee80211_check_fast_rx(struct sta_info *sta)
        if (assign)
                new = kmemdup(&fastrx, sizeof(fastrx), GFP_KERNEL);
 
-       offload = assign &&
-                 (sdata->vif.offload_flags & IEEE80211_OFFLOAD_DECAP_ENABLED);
+       offload_flags = get_bss_sdata(sdata)->vif.offload_flags;
+       offload = offload_flags & IEEE80211_OFFLOAD_DECAP_ENABLED;
 
-       if (offload)
+       if (assign && offload)
                set_offload = !test_and_set_sta_flag(sta, WLAN_STA_DECAP_OFFLOAD);
        else
                set_offload = test_and_clear_sta_flag(sta, WLAN_STA_DECAP_OFFLOAD);