]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mac802154: remove interfaces with RCU list deletion
authorYousef Alhouseen <alhouseenyousef@gmail.com>
Wed, 1 Jul 2026 16:42:22 +0000 (18:42 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Fri, 3 Jul 2026 14:14:23 +0000 (16:14 +0200)
Queue wake, stop, and disable paths walk local->interfaces under RCU.
The bulk hardware teardown path removes entries with list_del(), so an
asynchronous transmit completion can follow a poisoned list node in
ieee802154_wake_queue().

Use list_del_rcu() as in the single-interface removal path. The following
unregister_netdevice() waits for in-flight RCU readers before freeing the
netdevice, so no separate grace-period wait is needed.

Fixes: 592dfbfc72f5 ("mac820154: move interface unregistration into iface")
Reported-by: syzbot+36256deb69a588e9290e@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=36256deb69a588e9290e
Cc: stable@vger.kernel.org
Signed-off-by: Yousef Alhouseen <alhouseenyousef@gmail.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://patch.msgid.link/20260701164222.9094-1-alhouseenyousef@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/mac802154/iface.c

index 000be60d9580343e40f33ff872ec0aff7daa41d0..b823720630e726619da962494a80cade41c0118d 100644 (file)
@@ -703,7 +703,7 @@ void ieee802154_remove_interfaces(struct ieee802154_local *local)
 
        mutex_lock(&local->iflist_mtx);
        list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) {
-               list_del(&sdata->list);
+               list_del_rcu(&sdata->list);
 
                unregister_netdevice(sdata->dev);
        }