2022-08-05 13:58:14

by Veerendranath Jakkam

[permalink] [raw]
Subject: [PATCH] wifi: cfg80211: Fix validating BSS pointers in __cfg80211_connect_result

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.

Fixes: efbabc116500 ("cfg80211: Indicate MLO connection info in connect and roam callbacks")
Signed-off-by: Veerendranath Jakkam <[email protected]>
---
net/wireless/sme.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index 62c773cf1b8d..27fb2a0c4052 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -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) {
--
2.25.1



2022-08-08 08:11:13

by Kalle Valo

[permalink] [raw]
Subject: Re: wifi: cfg80211: Fix validating BSS pointers in __cfg80211_connect_result

Veerendranath Jakkam <[email protected]> wrote:

> 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 <[email protected]>
> Fixes: efbabc116500 ("cfg80211: Indicate MLO connection info in connect and roam callbacks")
> Signed-off-by: Veerendranath Jakkam <[email protected]>
> [[email protected]: add more info to the commit log]

Patch applied to wireless.git, thanks.

baa56dfe2cda wifi: cfg80211: Fix validating BSS pointers in __cfg80211_connect_result

--
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches