mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-21 22:09:23 +01:00
mpdu: tolerate technically illegal but harmless cloned IEs
This commit is contained in:
parent
6cc6a8a2cb
commit
1a554a300d
17
src/ie.h
17
src/ie.h
@ -598,6 +598,23 @@ static inline const unsigned char *ie_tlv_iter_get_data(
|
|||||||
return iter->data;
|
return iter->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool ie_tlv_iter_data_eq(struct ie_tlv_iter *a,
|
||||||
|
struct ie_tlv_iter *b)
|
||||||
|
{
|
||||||
|
if (a == b)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (a == NULL || b == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (ie_tlv_iter_get_length(a) != ie_tlv_iter_get_length(b))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return memcmp(ie_tlv_iter_get_data(a),
|
||||||
|
ie_tlv_iter_get_data(b),
|
||||||
|
ie_tlv_iter_get_length(a)) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
void *ie_tlv_extract_wsc_payload(const uint8_t *ies, size_t len,
|
void *ie_tlv_extract_wsc_payload(const uint8_t *ies, size_t len,
|
||||||
ssize_t *out_len);
|
ssize_t *out_len);
|
||||||
void *ie_tlv_encapsulate_wsc_payload(const uint8_t *data, size_t len,
|
void *ie_tlv_encapsulate_wsc_payload(const uint8_t *data, size_t len,
|
||||||
|
@ -398,9 +398,16 @@ static bool validate_mgmt_ies(const uint8_t *ies, size_t ies_len,
|
|||||||
|
|
||||||
memcpy(&clone, &iter, sizeof(clone));
|
memcpy(&clone, &iter, sizeof(clone));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some APs send completely identical duplicate IEs:
|
||||||
|
* Since these are harmless (and ignored by us) we're
|
||||||
|
* going to allow them here for interoperability.
|
||||||
|
*/
|
||||||
while (ie_tlv_iter_next(&clone)) {
|
while (ie_tlv_iter_next(&clone)) {
|
||||||
if (ie_tlv_iter_get_tag(&clone) != tag)
|
if (ie_tlv_iter_get_tag(&clone) != tag)
|
||||||
continue;
|
continue;
|
||||||
|
else if (ie_tlv_iter_data_eq(&iter, &clone))
|
||||||
|
continue;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user