• Johannes Berg's avatar
    wifi: mac80211: fix multi-BSSID element parsing · 38c6aa29
    Johannes Berg authored
    When parsing a frame containing a multi-BSSID element, we
    need to know both the transmitted and non-transmitted BSSID
    so we can parse it correctly.
    
    Unfortunately, in quite a number of cases, we got this wrong
    and were passing the wrong BSSID or useless information:
     * the mgmt->bssid from a frame is only the transmitted
       BSSID if the frame is a beacon
     * passing just one of the parameters as non-NULL isn't
       useful and ignored
    
    In those case where we need to parse for a specific BSS we
    always have a BSS structure pointer, representing the BSS
    we need, whether transmitted or not. Thus, pass that pointer
    to the parsing function instead of the two BSSIDs.
    
    Also fix two bugs:
     * we need to re-parse all the elements for the other BSS
       when iterating the non-transmitted BSSes in scan
     * we need to parse for the correct BSS when setting up
       the channel data in client code
    
    Fixes: 78ac51f8 ("mac80211: support multi-bssid")
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    38c6aa29
scan.c 39.6 KB