wifi: mac80211: fix control port frame addressing
authorJohannes Berg <johannes.berg@intel.com>
Wed, 24 Aug 2022 10:30:16 +0000 (12:30 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 25 Aug 2022 08:41:31 +0000 (10:41 +0200)
commita6ba64d0b187109dc252969c1fc9e2525868bd49
tree65589d4c2c39b4f88526f28e6cad906c680661fb
parent8b06d13ed29f324c30c688919dcb02f859cf2ca7
wifi: mac80211: fix control port frame addressing

For an AP interface, when userspace specifieds the link ID to
transmit the control port frame on (in particular for the
initial 4-way-HS), due to the logic in ieee80211_build_hdr()
for a frame transmitted from/to an MLD, we currently build a
header with

 A1 = DA = MLD address of the peer MLD
 A2 = local link address (!)
 A3 = SA = local MLD address

This clearly makes no sense, and leads to two problems:
 - if the frame were encrypted (not true for the initial
   4-way-HS) the AAD would be calculated incorrectly
 - if iTXQs are used, the frame is dropped by logic in
   ieee80211_tx_dequeue()

Fix the addressing, which fixes the first bullet, and the
second bullet for peer MLDs, I'll fix the second one for
non-MLD peers separately.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/tx.c