]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
net: airoha: Fix potential use-after-free in airoha_ppe_deinit()
authorWayen Yan <win847@gmail.com>
Wed, 8 Jul 2026 11:16:16 +0000 (19:16 +0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 21 Jul 2026 10:17:54 +0000 (12:17 +0200)
commit2484568a335cd7bda951c75b3a7d95ea36161ae7
tree0e324481765310bd70cfceeb70278fad19a86315
parent4c1eabbef7a1707635652e956e39db1269c3af2b
net: airoha: Fix potential use-after-free in airoha_ppe_deinit()

airoha_ppe_deinit() replaces the NPU pointer with NULL via
rcu_replace_pointer() but does not wait for existing RCU readers
to exit before calling ppe_deinit() and airoha_npu_put(). This can
cause a use-after-free if a reader in an RCU read-side critical
section still holds a reference to the NPU when it is freed.

The init path (airoha_ppe_init) already calls synchronize_rcu()
after rcu_assign_pointer(), but the deinit path introduced in
commit 6abcf751bc08 ("net: airoha: Fix schedule while atomic in
airoha_ppe_deinit()") omitted the matching barrier when switching
from rcu_read_lock()/rcu_dereference() to rcu_replace_pointer().

Add synchronize_rcu() before ppe_deinit() to ensure all existing
RCU readers have completed before the NPU resources are released.

Fixes: 6abcf751bc084804a9e5b3051442e8a2ce67f48a ("net: airoha: Fix schedule while atomic in airoha_ppe_deinit()")
Signed-off-by: Wayen Yan <win847@gmail.com>
Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/178351022574.97989.6880403520276841703@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/airoha/airoha_ppe.c