From: Johannes Berg <[email protected]>

Instead of open-coding the element walk, use the new macro.

Signed-off-by: Johannes Berg <[email protected]>
---
 net/mac80211/util.c | 25 ++++++-------------------
 1 file changed, 6 insertions(+), 19 deletions(-)

diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index d0eb38b890aa..7fa9ba197c26 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -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;
-- 
2.17.2

Reply via email to