Commit c17e28d1 authored by Johannes Berg's avatar Johannes Berg

mac80211: use element iteration macro in parsing

Instead of open-coding the element walk, use the new macro.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 0f3b07f0
......@@ -895,8 +895,7 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
struct ieee802_11_elems *elems,
u64 filter, u32 crc)
{
size_t left = len;
const u8 *pos = start;
struct element *elem;
bool calc_crc = filter != 0;
DECLARE_BITMAP(seen_elems, 256);
const u8 *ie;
......@@ -906,18 +905,11 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
elems->ie_start = start;
elems->total_len = len;
while (left >= 2) {
u8 id, elen;
for_each_element(elem, start, len) {
bool elem_parse_failed;
id = *pos++;
elen = *pos++;
left -= 2;
if (elen > left) {
elems->parse_error = true;
break;
}
u8 id = elem->id;
u8 elen = elem->datalen;
const u8 *pos = elem->data;
switch (id) {
case WLAN_EID_SSID:
......@@ -960,8 +952,6 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
*/
if (test_bit(id, seen_elems)) {
elems->parse_error = true;
left -= elen;
pos += elen;
continue;
}
break;
......@@ -1244,12 +1234,9 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
elems->parse_error = true;
else
__set_bit(id, seen_elems);
left -= elen;
pos += elen;
}
if (left != 0)
if (!for_each_element_completed(elem, start, len))
elems->parse_error = true;
return crc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment