]> git.baikalelectronics.ru Git - kernel.git/commitdiff
wifi: cfg80211: Fix validating BSS pointers in __cfg80211_connect_result
authorVeerendranath Jakkam <quic_vjakkam@quicinc.com>
Fri, 5 Aug 2022 13:52:59 +0000 (19:22 +0530)
committerKalle Valo <kvalo@kernel.org>
Mon, 8 Aug 2022 08:09:52 +0000 (11:09 +0300)
Driver's SME is allowed to fill either BSSID or BSS pointers in struct
cfg80211_connect_resp_params when indicating connect response but a
check in __cfg80211_connect_result() is giving unnecessary warning when
driver's SME fills only BSSID pointer and not BSS pointer in struct
cfg80211_connect_resp_params.

In case of mac80211 with auth/assoc path, it is always expected to fill
BSS pointers in struct cfg80211_connect_resp_params when calling
__cfg80211_connect_result() since cfg80211 must have hold BSS pointers
in cfg80211_mlme_assoc().

So, skip the check for the drivers which support cfg80211 connect
callback, for example with brcmfmac is one such driver which had the
warning:

WARNING: CPU: 5 PID: 514 at net/wireless/sme.c:786 __cfg80211_connect_result+0x2fc/0x5c0 [cfg80211]

Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Fixes: 7e55b6101cd4 ("cfg80211: Indicate MLO connection info in connect and roam callbacks")
Signed-off-by: Veerendranath Jakkam <quic_vjakkam@quicinc.com>
[kvalo@kernel.org: add more info to the commit log]
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220805135259.4126630-1-quic_vjakkam@quicinc.com
net/wireless/sme.c

index 62c773cf1b8df1f9fcfece1232607b7d51d0b402..27fb2a0c405242aae74c67724326a61ebc92089f 100644 (file)
@@ -782,9 +782,11 @@ void __cfg80211_connect_result(struct net_device *dev,
 #endif
 
        if (cr->status == WLAN_STATUS_SUCCESS) {
-               for_each_valid_link(cr, link) {
-                       if (WARN_ON_ONCE(!cr->links[link].bss))
-                               break;
+               if (!wiphy_to_rdev(wdev->wiphy)->ops->connect) {
+                       for_each_valid_link(cr, link) {
+                               if (WARN_ON_ONCE(!cr->links[link].bss))
+                                       break;
+                       }
                }
 
                for_each_valid_link(cr, link) {