mac802154: fix netdev use-after-free in beacon worker
authorZihan Xi <zihanx@nebusec.ai>
Sun, 2 Aug 2026 09:23:34 +0000 (09:23 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 6 Aug 2026 00:12:50 +0000 (17:12 -0700)
commit5f26a690e8efa54315e4922368daf54e0b8f5515
tree219043ed0a1b4a2eaf790d72cd93f3bc57468d0d
parent8aecf0bbcc72605592134c917c222207d8f63ab0
mac802154: fix netdev use-after-free in beacon worker

mac802154_beacon_worker() reads local->beacon_req under RCU and derives
the sub-interface from the request, but then drops the RCU read lock and
continues to use both sdata and the embedded wpan_dev.

mac802154_stop_beacons_locked() cancels only pending beacon work, clears
local->beacon_req and frees the request.  A beacon worker that is already
running can therefore continue after interface teardown and dereference
the freed netdev private area.

The scan worker already pins the netdev before leaving RCU.  Apply the
same lifetime rule to the beacon worker: take a netdev reference while
the request is still protected by RCU, and release it on all paths that
continue after the reference is acquired.

Fixes: 3accf4762734 ("mac802154: Handle basic beaconing")
Cc: stable@vger.kernel.org
Reported-by: Vega <vega@nebusec.ai>
Signed-off-by: Zihan Xi <zihanx@nebusec.ai>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://patch.msgid.link/e9a3909c7a6281967961773ca841e860b8ecf40e.1785596603.git.zihanx@nebusec.ai
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mac802154/scan.c