if (!(ifmgd->flags & IEEE80211_STA_DISABLE_HT) &&
            sband->ht_cap.ht_supported) {
-               const u8 *ht_oper_ie;
+               const u8 *ht_oper_ie, *ht_cap;
 
                ht_oper_ie = ieee80211_bss_get_ie(cbss, WLAN_EID_HT_OPERATION);
                if (ht_oper_ie && ht_oper_ie[1] >= sizeof(*ht_oper))
                        ht_oper = (void *)(ht_oper_ie + 2);
+
+               ht_cap = ieee80211_bss_get_ie(cbss, WLAN_EID_HT_CAPABILITY);
+               if (!ht_cap || ht_cap[1] < sizeof(struct ieee80211_ht_cap)) {
+                       ifmgd->flags |= IEEE80211_STA_DISABLE_HT;
+                       ht_oper = NULL;
+               }
        }
 
        if (!(ifmgd->flags & IEEE80211_STA_DISABLE_VHT) &&
            sband->vht_cap.vht_supported) {
-               const u8 *vht_oper_ie;
+               const u8 *vht_oper_ie, *vht_cap;
 
                vht_oper_ie = ieee80211_bss_get_ie(cbss,
                                                   WLAN_EID_VHT_OPERATION);
                        ifmgd->flags |= IEEE80211_STA_DISABLE_HT;
                        ifmgd->flags |= IEEE80211_STA_DISABLE_VHT;
                }
+
+               vht_cap = ieee80211_bss_get_ie(cbss, WLAN_EID_VHT_CAPABILITY);
+               if (!vht_cap || vht_cap[1] < sizeof(struct ieee80211_vht_cap)) {
+                       ifmgd->flags |= IEEE80211_STA_DISABLE_VHT;
+                       vht_oper = NULL;
+               }
        }
 
        ifmgd->flags |= ieee80211_determine_chantype(sdata, sband,