mt76: fix tx status related use-after-free race on station removal
authorFelix Fietkau <nbd@nbd.name>
Sat, 23 Apr 2022 05:01:18 +0000 (07:01 +0200)
committerFelix Fietkau <nbd@nbd.name>
Fri, 13 May 2022 07:39:35 +0000 (09:39 +0200)
commitfcfe1b5e162bf473c1d47760962cec8523c00466
tree46ea12fc53c24ea4b7ae07eeca9436df99edaa77
parentbc98e7fdd80d215b4b55eea001023231eb8ce12e
mt76: fix tx status related use-after-free race on station removal

There is a small race window where ongoing tx activity can lead to a skb
getting added to the status tracking idr after that idr has already been
cleaned up, which will keep the wcid linked in the status poll list.
Fix this by only adding status skbs if the wcid pointer is still assigned
in dev->wcid, which gets cleared early by mt76_sta_pre_rcu_remove

Fixes: bd1e3e7b693c ("mt76: introduce packet_id idr")
Tested-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mac80211.c
drivers/net/wireless/mediatek/mt76/tx.c