Search Linux Wireless

[PATCH AUTOSEL 6.14 018/108] wifi: mac80211: validate SCAN_FLAG_AP in scan request during MLO

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Aditya Kumar Singh <aditya.kumar.singh@xxxxxxxxxxxxxxxx>

[ Upstream commit 78a7a126dc5b8e3c5a3d4da9f513e0236d2dc1a3 ]

When an AP interface is already beaconing, a subsequent scan is not allowed
unless the user space explicitly sets the flag NL80211_SCAN_FLAG_AP in the
scan request. If this flag is not set, the scan request will be returned
with the error code -EOPNOTSUPP. However, this restriction currently
applies only to non-ML interfaces. For ML interfaces, scans are allowed
without this flag being explicitly set by the user space which is wrong.
This is because the beaconing check currently uses only the deflink, which
does not get set during MLO.

Hence to fix this, during MLO, use the existing helper
ieee80211_num_beaconing_links() to know if any of the link is beaconing.

Signed-off-by: Aditya Kumar Singh <aditya.kumar.singh@xxxxxxxxxxxxxxxx>
Link: https://patch.msgid.link/20250516-bug_fix_mlo_scan-v2-1-12e59d9110ac@xxxxxxxxxxxxxxxx
Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx>
Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
---

Based on my analysis, here is my decision: **YES** This commit should be
backported to stable kernel trees for the following reasons: ## Security
and Functional Bug Analysis 1. **Clear Security/Behavioral Bug**: This
commit fixes a significant security validation bypass in MLO (Multi-Link
Operation) mode. The bug allows AP interfaces in MLO mode to perform
scans without the required `NL80211_SCAN_FLAG_AP` flag, which bypasses
an important protection mechanism. 2. **Root Cause**: The issue stems
from line 2927 in `net/mac80211/cfg.c` where the code was checking
`sdata->deflink.u.ap.beacon` instead of using
`ieee80211_num_beaconing_links(sdata)`. In MLO mode, `deflink` doesn't
get properly set, so the beaconing check fails and scans are incorrectly
allowed without proper authorization. 3. **Impact Scope**: - The bug
affects all kernels with MLO support (since v6.0) where
`ieee80211_num_beaconing_links()` is available (since v6.10) - MLO was
introduced in kernel v6.0, but the helper function was only added in
v6.10 - This means kernels v6.10+ with MLO support have this
vulnerability ## Code Change Analysis The fix is minimal and surgical:
```c // Before: if (sdata->deflink.u.ap.beacon && // After: if
(ieee80211_num_beaconing_links(sdata) && ``` This change: - Replaces a
deflink-specific check with a MLO-aware function - The
`ieee80211_num_beaconing_links()` function properly iterates through all
links in MLO mode and checks for beaconing on any link - In non-MLO
mode, it still works correctly (after commit 68b44b05f4c8) - Is
contained, with no side effects beyond fixing the intended issue ##
Stable Tree Criteria Met 1. **Important Bug Fix**: ✅ Fixes security
validation bypass 2. **Small and Contained**: ✅ Single line change 3.
**No Architectural Changes**: ✅ Uses existing helper function 4.
**Minimal Regression Risk**: ✅ The change makes the validation more
strict, not less 5. **Clear Affects Users**: ✅ Any MLO AP deployment is
affected ## Historical Context Looking at the similar commits provided,
this follows the pattern of "Backport Status: YES" from commit #5, which
was also a small fix for MLO address translation issues that could break
functionality. ## Recommendation This should be backported to stable
trees that have both: - MLO support (v6.0+) - The
`ieee80211_num_beaconing_links()` helper function (v6.10+) The backport
target should be **v6.10+** stable trees.

 net/mac80211/cfg.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index a7aeb37254bbf..caf93f0d53370 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -2904,7 +2904,7 @@ static int ieee80211_scan(struct wiphy *wiphy,
 		 * the frames sent while scanning on other channel will be
 		 * lost)
 		 */
-		if (sdata->deflink.u.ap.beacon &&
+		if (ieee80211_num_beaconing_links(sdata) &&
 		    (!(wiphy->features & NL80211_FEATURE_AP_SCAN) ||
 		     !(req->flags & NL80211_SCAN_FLAG_AP)))
 			return -EOPNOTSUPP;
-- 
2.39.5





[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux