From: Jouni Malinen Date: Sat, 7 May 2022 21:39:20 +0000 (+0300) Subject: Check he_cap pointer in hostapd_set_freq_params() consistently X-Git-Tag: hostap_2_11~1922 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8392c86df0745c82f4e1ce1b9613905ba9d34f1f;p=thirdparty%2Fhostap.git Check he_cap pointer in hostapd_set_freq_params() consistently The EHT changes made this checking inconsistent. If he_cap can be NULL in case of EHT being enabled, better make sure it does not get dereferenced without an explicit check. Signed-off-by: Jouni Malinen --- diff --git a/src/common/hw_features_common.c b/src/common/hw_features_common.c index 732124f4d..2e10e7386 100644 --- a/src/common/hw_features_common.c +++ b/src/common/hw_features_common.c @@ -501,7 +501,8 @@ int hostapd_set_freq_params(struct hostapd_freq_params *data, break; if (mode == HOSTAPD_MODE_IEEE80211G) { - if (!(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] & + if (he_cap && + !(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] & HE_PHYCAP_CHANNEL_WIDTH_SET_40MHZ_IN_2G)) { wpa_printf(MSG_ERROR, "40 MHz channel width is not supported in 2.4 GHz"); @@ -512,7 +513,8 @@ int hostapd_set_freq_params(struct hostapd_freq_params *data, /* fall through */ case CHANWIDTH_80MHZ: if (mode == HOSTAPD_MODE_IEEE80211A) { - if (!(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] & + if (he_cap && + !(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] & HE_PHYCAP_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G)) { wpa_printf(MSG_ERROR, "40/80 MHz channel width is not supported in 5/6 GHz"); @@ -521,7 +523,8 @@ int hostapd_set_freq_params(struct hostapd_freq_params *data, } break; case CHANWIDTH_80P80MHZ: - if (!(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] & + if (he_cap && + !(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] & HE_PHYCAP_CHANNEL_WIDTH_SET_80PLUS80MHZ_IN_5G)) { wpa_printf(MSG_ERROR, "80+80 MHz channel width is not supported in 5/6 GHz"); @@ -529,7 +532,8 @@ int hostapd_set_freq_params(struct hostapd_freq_params *data, } break; case CHANWIDTH_160MHZ: - if (!(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] & + if (he_cap && + !(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] & HE_PHYCAP_CHANNEL_WIDTH_SET_160MHZ_IN_5G)) { wpa_printf(MSG_ERROR, "160 MHz channel width is not supported in 5 / 6GHz");