wifi: mac80211: add a workaround for receiving non-standard mesh A-MSDU
authorFelix Fietkau <nbd@nbd.name>
Mon, 13 Feb 2023 10:08:55 +0000 (11:08 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 14 Feb 2023 11:35:02 +0000 (12:35 +0100)
commit6e4c0d0460bd32ca9244dff3ba2d2da27235de11
tree6ccf602edcd5b9b794e89eed86dd0fc5c7287de9
parent986e43b19ae9176093da35e0a844e65c8bf9ede7
wifi: mac80211: add a workaround for receiving non-standard mesh A-MSDU

At least ath10k and ath11k supported hardware (maybe more) does not implement
mesh A-MSDU aggregation in a standard compliant way.
802.11-2020 9.3.2.2.2 declares that the Mesh Control field is part of the
A-MSDU header (and little-endian).
As such, its length must not be included in the subframe length field.
Hardware affected by this bug treats the mesh control field as part of the
MSDU data and sets the length accordingly.
In order to avoid packet loss, keep track of which stations are affected
by this and take it into account when converting A-MSDU to 802.3 + mesh control
packets.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
Link: https://lore.kernel.org/r/20230213100855.34315-5-nbd@nbd.name
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/cfg80211.h
net/mac80211/rx.c
net/mac80211/sta_info.c
net/mac80211/sta_info.h
net/wireless/util.c