Message ID | 22e24ec8-283f-49e9-b7b0-555e8113c250@web.de (mailing list archive) |
---|---|
State | Rejected |
Delegated to: | Johannes Berg |
Headers | show |
Series | [RESEND] iwlwifi: Adjust input parameter validation in iwl_sta_calc_ht_flags() | expand |
On Mon, 2025-03-03 at 14:18 +0100, Markus Elfring wrote: > From: Markus Elfring <elfring@users.sourceforge.net> > Date: Wed, 19 Apr 2023 19:19:34 +0200 > > The address of a data structure member was determined before > a corresponding null pointer check in the implementation of > the function “iwl_sta_calc_ht_flags”. > > Thus avoid the risk for undefined behaviour by moving the assignment > for the variable “sta_ht_inf” behind the null pointer check. I am a bit confused, I don't see any risk of undefined behaviour here. The change is obviously fine, and I guess one can argue that it is less confusing as the compiler will generate a warning if one uses the variable before assignment. However, the code is both well defined and correct. If sta is NULL then sta_ht_inf is never used, so the fact that it is effectively a NULL pointer [offsetof(struct ieee80211_sta, deflink.ht_cap)] does not matter. Benjamin > This issue was detected by using the Coccinelle software. > > Fixes: 046d2e7c50e3 ("mac80211: prepare sta handling for MLO > support") > Signed-off-by: Markus Elfring <elfring@users.sourceforge.net> > --- > drivers/net/wireless/intel/iwlwifi/dvm/sta.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c > b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c > index cef43cf80620..74814ce0155e 100644 > --- a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c > +++ b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c > @@ -147,7 +147,7 @@ static void iwl_sta_calc_ht_flags(struct iwl_priv > *priv, > struct iwl_rxon_context *ctx, > __le32 *flags, __le32 *mask) > { > - struct ieee80211_sta_ht_cap *sta_ht_inf = &sta- > >deflink.ht_cap; > + struct ieee80211_sta_ht_cap *sta_ht_inf; > > *mask = STA_FLG_RTS_MIMO_PROT_MSK | > STA_FLG_MIMO_DIS_MSK | > @@ -156,7 +156,11 @@ static void iwl_sta_calc_ht_flags(struct > iwl_priv *priv, > STA_FLG_AGG_MPDU_DENSITY_MSK; > *flags = 0; > > - if (!sta || !sta_ht_inf->ht_supported) > + if (!sta) > + return; > + > + sta_ht_inf = &sta->deflink.ht_cap; > + if (!sta_ht_inf->ht_supported) > return; > > IWL_DEBUG_INFO(priv, "STA %pM SM PS mode: %s\n", > -- > 2.40.0 > Intel Deutschland GmbH Registered Address: Am Campeon 10, 85579 Neubiberg, Germany Tel: +49 89 99 8853-0, www.intel.de Managing Directors: Sean Fennelly, Jeffrey Schneiderman, Tiffany Doon Silva Chairperson of the Supervisory Board: Nicole Lau Registered Office: Munich Commercial Register: Amtsgericht Muenchen HRB 186928
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c index cef43cf80620..74814ce0155e 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c @@ -147,7 +147,7 @@ static void iwl_sta_calc_ht_flags(struct iwl_priv *priv, struct iwl_rxon_context *ctx, __le32 *flags, __le32 *mask) { - struct ieee80211_sta_ht_cap *sta_ht_inf = &sta->deflink.ht_cap; + struct ieee80211_sta_ht_cap *sta_ht_inf; *mask = STA_FLG_RTS_MIMO_PROT_MSK | STA_FLG_MIMO_DIS_MSK | @@ -156,7 +156,11 @@ static void iwl_sta_calc_ht_flags(struct iwl_priv *priv, STA_FLG_AGG_MPDU_DENSITY_MSK; *flags = 0; - if (!sta || !sta_ht_inf->ht_supported) + if (!sta) + return; + + sta_ht_inf = &sta->deflink.ht_cap; + if (!sta_ht_inf->ht_supported) return; IWL_DEBUG_INFO(priv, "STA %pM SM PS mode: %s\n",