Skip to content

Commit c17e28d

Browse files
committed
mac80211: use element iteration macro in parsing
Instead of open-coding the element walk, use the new macro. Signed-off-by: Johannes Berg <[email protected]>
1 parent 0f3b07f commit c17e28d

File tree

1 file changed

+6
-19
lines changed

1 file changed

+6
-19
lines changed

net/mac80211/util.c

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -895,8 +895,7 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
895895
struct ieee802_11_elems *elems,
896896
u64 filter, u32 crc)
897897
{
898-
size_t left = len;
899-
const u8 *pos = start;
898+
struct element *elem;
900899
bool calc_crc = filter != 0;
901900
DECLARE_BITMAP(seen_elems, 256);
902901
const u8 *ie;
@@ -906,18 +905,11 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
906905
elems->ie_start = start;
907906
elems->total_len = len;
908907

909-
while (left >= 2) {
910-
u8 id, elen;
908+
for_each_element(elem, start, len) {
911909
bool elem_parse_failed;
912-
913-
id = *pos++;
914-
elen = *pos++;
915-
left -= 2;
916-
917-
if (elen > left) {
918-
elems->parse_error = true;
919-
break;
920-
}
910+
u8 id = elem->id;
911+
u8 elen = elem->datalen;
912+
const u8 *pos = elem->data;
921913

922914
switch (id) {
923915
case WLAN_EID_SSID:
@@ -960,8 +952,6 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
960952
*/
961953
if (test_bit(id, seen_elems)) {
962954
elems->parse_error = true;
963-
left -= elen;
964-
pos += elen;
965955
continue;
966956
}
967957
break;
@@ -1244,12 +1234,9 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
12441234
elems->parse_error = true;
12451235
else
12461236
__set_bit(id, seen_elems);
1247-
1248-
left -= elen;
1249-
pos += elen;
12501237
}
12511238

1252-
if (left != 0)
1239+
if (!for_each_element_completed(elem, start, len))
12531240
elems->parse_error = true;
12541241

12551242
return crc;

0 commit comments

Comments
 (0)