[PATCH] cfg80211: fix double-free of shared hidden-group beacon IEs

From: Yilin Zhang

Date: Tue Sep 01 2026 - 04:08:34 EST


cfg80211_update_known_bss() adopts new->pub.beacon_ies without
checking whether new is a hidden group member.

cfg80211_update_assoc_bss_entry() can pass such a member as new on a
CSA channel switch, so the same IEs get two owners and are freed
twice.

Same issue as commit 26e84445f02c ("wifi: cfg80211: fix
use-after-free in cmp_bss()"), which fixed only the drop path.

Reported-by: Kimi Security Team <bug-report@xxxxxxxxxxx>
Fixes: 0afd425b1b64 ("cfg80211: fix duplicated scan entries after channel switch")
Signed-off-by: Yilin Zhang <yilinzhang@xxxxxxxxxxx>
---
net/wireless/scan.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index 071083c..1fbbcda 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -1937,6 +1937,9 @@ cfg80211_update_known_bss(struct cfg80211_registered_device *rdev,
return false;
}

+ if (new->pub.hidden_beacon_bss)
+ return true;
+
old = rcu_access_pointer(known->pub.beacon_ies);

rcu_assign_pointer(known->pub.beacon_ies, new->pub.beacon_ies);
--
2.34.1