mac80211: use element iteration macro in parsing
Instead of open-coding the element walk, use the new macro. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
0f3b07f027
commit
c17e28d1bc
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue