<Ajay.Kathat@xxxxxxxxxxxxx> writes: > Hi Kalle, > > On 27/07/22 18:30, Kalle Valo wrote: >> EXTERNAL EMAIL: Do not click links or open attachments unless you >> know the content is safe >> >> <Ajay.Kathat@xxxxxxxxxxxxx> writes: >> >>> From: Ajay Singh <ajay.kathat@xxxxxxxxxxxxx> >>> >>> Sparse reported below warning >>>>> drivers/net/wireless/microchip/wilc1000/cfg80211.c:361:42: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int key_mgmt_suite @@ got restricted __be32 [usertype] @@ >>> 'key_mgmt_suite' value is expected in big-endian format. After receiving >>> mgmt_suite value from wpa_s convert to cpu endianness because the same >>> value is return back using cfg80211_external_auth_request(). Use >>> be32_to_cpu() conversion API to avoid the sparse warning. >>> >>> Reported-by: kernel test robot <lkp@xxxxxxxxx> >>> Fixes: c5b331d4f550fb78 ("wifi: wilc1000: add WPA3 SAE support") >>> Signed-off-by: Ajay Singh <ajay.kathat@xxxxxxxxxxxxx> >>> --- >>> drivers/net/wireless/microchip/wilc1000/cfg80211.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/drivers/net/wireless/microchip/wilc1000/cfg80211.c b/drivers/net/wireless/microchip/wilc1000/cfg80211.c >>> index 5c2c7f1dbffd..19862d932f1f 100644 >>> --- a/drivers/net/wireless/microchip/wilc1000/cfg80211.c >>> +++ b/drivers/net/wireless/microchip/wilc1000/cfg80211.c >>> @@ -359,7 +359,7 @@ static int connect(struct wiphy *wiphy, struct net_device *dev, >>> memcpy(vif->auth.ssid.ssid, sme->ssid, sme->ssid_len); >>> vif->auth.ssid.ssid_len = sme->ssid_len; >>> } >>> - vif->auth.key_mgmt_suite = cpu_to_be32(sme->crypto.akm_suites[0]); >>> + vif->auth.key_mgmt_suite = be32_to_cpu((__force __be32)sme->crypto.akm_suites[0]); >> No time to investigate in detail but the cast is just ugly. Isn't there >> a better way to fix this? > > > I think, there is an another way to handle this issue. 'key_mgmt_suite' > element in 'cfg80211_external_auth_params' struct should be converted to > '__be32' type(like below code snippet) because wpa_s expects the value > in big-endian format . After this change, the type case can be avoided. > Though I am not sure if these changes can have impact on other driver. > > > diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h > index cc8a9880b9d6..92df70afe445 100644 > --- a/include/net/cfg80211.h > +++ b/include/net/cfg80211.h > @@ -3509,7 +3509,7 @@ struct cfg80211_external_auth_params { > enum nl80211_external_auth_action action; > u8 bssid[ETH_ALEN] __aligned(2); > struct cfg80211_ssid ssid; > - unsigned int key_mgmt_suite; > + __be32 key_mgmt_suite; > u16 status; > const u8 *pmkid; > }; So just that I understand correctly: struct cfg80211_crypto_settings::akm_suites is in cpu endian but struct struct cfg80211_external_auth_params::key_mgmt_suite is in big endian? But your original patch uses be32_to_cpu() so I must be confused. It would be good to document this in cfg80211.h, the documentation there doesn't mention anything about endian. -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches