]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: rtw89: wow: Add Basic Rate IE to probe request in scheduled scan mode
authorChin-Yen Lee <timlee@realtek.com>
Wed, 16 Jul 2025 12:29:26 +0000 (20:29 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Aug 2025 16:41:07 +0000 (18:41 +0200)
[ Upstream commit 37c23874d13eb369d8b384a1ce5992ff6c23d56f ]

In scheduled scan mode, the current probe request only includes the SSID
IE, but omits the Basic Rate IE. Some APs do not respond to such
incomplete probe requests, causing net-detect failures. To improve
interoperability and ensure APs respond correctly, add the Basic Rate IE
to the probe request in driver.

Signed-off-by: Chin-Yen Lee <timlee@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250716122926.6709-1-pkshih@realtek.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/realtek/rtw89/wow.c

index 34a0ab49bd7a9e064701d9a5da135dc4a3c1f9c1..b6df7900fdc873eb72f378fac687121ea2439594 100644 (file)
@@ -1412,6 +1412,8 @@ static void rtw89_fw_release_pno_pkt_list(struct rtw89_dev *rtwdev,
 static int rtw89_pno_scan_update_probe_req(struct rtw89_dev *rtwdev,
                                           struct rtw89_vif_link *rtwvif_link)
 {
+       static const u8 basic_rate_ie[] = {WLAN_EID_SUPP_RATES, 0x08,
+                0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c};
        struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
        struct cfg80211_sched_scan_request *nd_config = rtw_wow->nd_config;
        u8 num = nd_config->n_match_sets, i;
@@ -1423,10 +1425,11 @@ static int rtw89_pno_scan_update_probe_req(struct rtw89_dev *rtwdev,
                skb = ieee80211_probereq_get(rtwdev->hw, rtwvif_link->mac_addr,
                                             nd_config->match_sets[i].ssid.ssid,
                                             nd_config->match_sets[i].ssid.ssid_len,
-                                            nd_config->ie_len);
+                                            nd_config->ie_len + sizeof(basic_rate_ie));
                if (!skb)
                        return -ENOMEM;
 
+               skb_put_data(skb, basic_rate_ie, sizeof(basic_rate_ie));
                skb_put_data(skb, nd_config->ie, nd_config->ie_len);
 
                info = kzalloc(sizeof(*info), GFP_KERNEL);