rtw88: fix null vif pointer when hw_scan fails
authorPo-Hao Huang <phhuang@realtek.com>
Fri, 20 May 2022 08:15:23 +0000 (16:15 +0800)
committerKalle Valo <kvalo@kernel.org>
Mon, 30 May 2022 11:03:22 +0000 (14:03 +0300)
Add this check to avoid crash by dereferencing a null pointer. When hwscan
fails due to no memory or dma failure, the scan flag in ieee80211_local is
cleared. So mac80211 determine that it's not hw_scan then calls
sw_scan_complete() with null vif, which is also freed during the fail.

Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220520081523.45987-1-pkshih@realtek.com
drivers/net/wireless/realtek/rtw88/main.c

index 14289f83feb54d69407b4d0dcef0e11a3177c879..d298cba23e3d35ab619cfe0f26b67ad95d0c0e0f 100644 (file)
@@ -1383,9 +1383,12 @@ void rtw_core_scan_start(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif,
 void rtw_core_scan_complete(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
                            bool hw_scan)
 {
-       struct rtw_vif *rtwvif = (struct rtw_vif *)vif->drv_priv;
+       struct rtw_vif *rtwvif = vif ? (struct rtw_vif *)vif->drv_priv : NULL;
        u32 config = 0;
 
+       if (!rtwvif)
+               return;
+
        clear_bit(RTW_FLAG_SCANNING, rtwdev->flags);
        clear_bit(RTW_FLAG_DIG_DISABLE, rtwdev->flags);