From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2CDC03431F5; Fri, 9 Oct 2026 14:25:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791555904; cv=none; b=beD1ubRMbQKSp7WJZwc8MaTr30PYZ16i2dkpdycmzIl1jgJCiUGRuIXPN7IADr6g8YzzceMOVYUpobSrZxCjtrgL1N/CZub7xCCXs/o0o27BTNNwI34m9pe3H410MXl/YApcDuV8kWfOVxgjjrwRlQZCQj2ot4SHFobWaWTtptI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791555904; c=relaxed/simple; bh=wmynu3urcwFcjEUNUOD2cNf1gSfwDXxnctNpLtJuMjA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tUPHe4Te5mVsRWWUtqVhZlLM1O5hZuKus6LzU9YPekNDhBHMlrlU/4z7qXax+r7itLXkzVsTPborH3U+fQ65yzMe/Th/oSkdbuOhhY5tOTI6K1Bj8OtZvrhPDwWBWfnDf1QYKp+AzHRvXDHOBi3vjqUh4vuLnp016CKhWctsE2M= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=IgzP/OyB; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="IgzP/OyB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7B7FC1F000FF; Fri, 9 Oct 2026 14:25:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1791555903; bh=xxipEeZ18tO6qtp0CbxeJSFreG/Qysl7mZShFyfpFRE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=IgzP/OyBTSZvzCJnolSWHQjYXq5A584VpN+lQ4rMiMQNadgPCR05r0FVfyg7WpZ6H lxh6PwSIsevDtIsfAmEXvaofIHeoNdMXqGHzWp+brDjXwdshrBCY7Yz1l5G+uCkfrx IReE9YkA2Oxl24wNEFsJR459/igHbfI7333jt5DE= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Yilin Zhang , Zhao Li , Johannes Berg , Sasha Levin Subject: [PATCH 7.2 088/428] wifi: cfg80211: preserve hidden-group beacon IE ownership Date: Fri, 9 Oct 2026 16:07:05 +0200 Message-ID: <20261009140948.121263991@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261009140946.008206689@linuxfoundation.org> References: <20261009140946.008206689@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 7.2-stable review patch. If anyone has any objections, please let me know. ------------------ From: Zhao Li [ Upstream commit cc45f313d85533d647ce619326302aad6f797c14 ] A hidden-group probe-response entry borrows its beacon IEs from the group's beacon entry. cfg80211_update_assoc_bss_entry() can pass such an entry to cfg80211_update_known_bss() when merging scan entries after a channel switch. Copying the borrowed beacon_ies into the associated entry gives the same allocation two owners. Releasing the group's beacon entry can then leave the associated entry pointing to freed IEs, which are freed again when that entry is released. Skip beacon IE replacement when the source entry belongs to a hidden group. Preserve probe-response processing, the subsequent metadata updates, and the existing rejection path for conflicting hidden beacon updates. Fixes: 0afd425b1b64 ("cfg80211: fix duplicated scan entries after channel switch") Reported-by: Yilin Zhang Closes: https://lore.kernel.org/linux-wireless/20260901080427.1983015-1-yilinzhang@moonshot.ai/ Assisted-by: Codex:gpt-6-astra Signed-off-by: Zhao Li Signed-off-by: Johannes Berg Signed-off-by: Sasha Levin --- net/wireless/scan.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/net/wireless/scan.c b/net/wireless/scan.c index 4a1ec7e3547d8..9af995894bd5a 100644 --- a/net/wireless/scan.c +++ b/net/wireless/scan.c @@ -1964,20 +1964,22 @@ cfg80211_update_known_bss(struct cfg80211_registered_device *rdev, return false; } - old = rcu_access_pointer(known->pub.beacon_ies); + if (!new->pub.hidden_beacon_bss) { + old = rcu_access_pointer(known->pub.beacon_ies); - rcu_assign_pointer(known->pub.beacon_ies, new->pub.beacon_ies); + rcu_assign_pointer(known->pub.beacon_ies, new->pub.beacon_ies); - /* Override IEs if they were from a beacon before */ - if (old == rcu_access_pointer(known->pub.ies)) - rcu_assign_pointer(known->pub.ies, new->pub.beacon_ies); + /* Override IEs if they were from a beacon before */ + if (old == rcu_access_pointer(known->pub.ies)) + rcu_assign_pointer(known->pub.ies, new->pub.beacon_ies); - cfg80211_update_hidden_bsses(known, - rcu_access_pointer(new->pub.beacon_ies), - old); + cfg80211_update_hidden_bsses(known, + rcu_access_pointer(new->pub.beacon_ies), + old); - if (old) - kfree_rcu((struct cfg80211_bss_ies *)old, rcu_head); + if (old) + kfree_rcu((struct cfg80211_bss_ies *)old, rcu_head); + } } known->pub.beacon_interval = new->pub.beacon_interval; -- 2.53.0