• Johannes Berg's avatar
    wifi: cfg80211: fix BSS refcounting bugs · 0b780881
    Johannes Berg authored
    There are multiple refcounting bugs related to multi-BSSID:
     - In bss_ref_get(), if the BSS has a hidden_beacon_bss, then
       the bss pointer is overwritten before checking for the
       transmitted BSS, which is clearly wrong. Fix this by using
       the bss_from_pub() macro.
    
     - In cfg80211_bss_update() we copy the transmitted_bss pointer
       from tmp into new, but then if we release new, we'll unref
       it erroneously. We already set the pointer and ref it, but
       need to NULL it since it was copied from the tmp data.
    
     - In cfg80211_inform_single_bss_data(), if adding to the non-
       transmitted list fails, we unlink the BSS and yet still we
       return it, but this results in returning an entry without
       a reference. We shouldn't return it anyway if it was broken
       enough to not get added there.
    
    This fixes CVE-2022-42720.
    Reported-by: default avatarSönke Huster <shuster@seemoo.tu-darmstadt.de>
    Tested-by: default avatarSönke Huster <shuster@seemoo.tu-darmstadt.de>
    Fixes: a3584f56 ("cfg80211: Properly track transmitting and non-transmitting BSS")
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    0b780881
scan.c 85.2 KB