|
@@ -522,8 +522,16 @@ int wpa_supplicant_parse_ies(const u8 *buf, size_t len,
|
|
|
ie->supp_channels = pos + 2;
|
|
|
ie->supp_channels_len = pos[1];
|
|
|
} else if (*pos == WLAN_EID_SUPPORTED_OPERATING_CLASSES) {
|
|
|
- ie->supp_oper_classes = pos + 2;
|
|
|
- ie->supp_oper_classes_len = pos[1];
|
|
|
+ /*
|
|
|
+ * The value of the Length field of the Supported
|
|
|
+ * Operating Classes element is between 2 and 253.
|
|
|
+ * Silently skip invalid elements to avoid interop
|
|
|
+ * issues when trying to use the value.
|
|
|
+ */
|
|
|
+ if (pos[1] >= 2 && pos[1] <= 253) {
|
|
|
+ ie->supp_oper_classes = pos + 2;
|
|
|
+ ie->supp_oper_classes_len = pos[1];
|
|
|
+ }
|
|
|
} else if (*pos == WLAN_EID_VENDOR_SPECIFIC) {
|
|
|
ret = wpa_parse_generic(pos, end, ie);
|
|
|
if (ret < 0)
|