]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: mac80211: fix non-transmitted BSSID profile search
authorJohannes Berg <johannes.berg@intel.com>
Mon, 30 Jun 2025 13:45:01 +0000 (15:45 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 7 Jul 2025 08:42:48 +0000 (10:42 +0200)
When the non-transmitted BSSID profile is found, immediately return
from the search to not return the wrong profile_len when the profile
is found in a multiple BSSID element that isn't the last one in the
frame.

Fixes: 5023b14cf4df ("mac80211: support profile split between elements")
Reported-by: Michael-CY Lee <michael-cy.lee@mediatek.com>
Link: https://patch.msgid.link/20250630154501.f26cd45a0ecd.I28e0525d06e8a99e555707301bca29265cf20dc8@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/parse.c

index 96584b39215e69a8f2752dad5ce99b3cdaad4b9e..c5e0f7f4600489c60e2731c21ca38d23883e576d 100644 (file)
@@ -758,7 +758,6 @@ static size_t ieee802_11_find_bssid_profile(const u8 *start, size_t len,
 {
        const struct element *elem, *sub;
        size_t profile_len = 0;
-       bool found = false;
 
        if (!bss || !bss->transmitted_bss)
                return profile_len;
@@ -809,15 +808,14 @@ static size_t ieee802_11_find_bssid_profile(const u8 *start, size_t len,
                                               index[2],
                                               new_bssid);
                        if (ether_addr_equal(new_bssid, bss->bssid)) {
-                               found = true;
                                elems->bssid_index_len = index[1];
                                elems->bssid_index = (void *)&index[2];
-                               break;
+                               return profile_len;
                        }
                }
        }
 
-       return found ? profile_len : 0;
+       return 0;
 }
 
 static void