]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
common: Use for_each_element_id() in ieee802_11_vendor_ie_concat()
authorJohannes Berg <johannes.berg@intel.com>
Fri, 8 Feb 2019 16:57:50 +0000 (17:57 +0100)
committerJouni Malinen <j@w1.fi>
Mon, 11 Feb 2019 11:37:22 +0000 (13:37 +0200)
Simple cleanup using the new iteration helper macro.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
src/common/ieee802_11_common.c

index b38f2f106b384fb29d52fa01b595308207d5c3dc..17f623c7b8961dcdf5e5b9b09023c266e99531f8 100644 (file)
@@ -560,24 +560,17 @@ struct wpabuf * ieee802_11_vendor_ie_concat(const u8 *ies, size_t ies_len,
                                            u32 oui_type)
 {
        struct wpabuf *buf;
-       const u8 *end, *pos, *ie;
+       const struct element *elem, *found = NULL;
 
-       pos = ies;
-       end = ies + ies_len;
-       ie = NULL;
-
-       while (end - pos > 1) {
-               if (2 + pos[1] > end - pos)
-                       return NULL;
-               if (pos[0] == WLAN_EID_VENDOR_SPECIFIC && pos[1] >= 4 &&
-                   WPA_GET_BE32(&pos[2]) == oui_type) {
-                       ie = pos;
+       for_each_element_id(elem, WLAN_EID_VENDOR_SPECIFIC, ies, ies_len) {
+               if (elem->datalen >= 4 &&
+                   WPA_GET_BE32(elem->data) == oui_type) {
+                       found = elem;
                        break;
                }
-               pos += 2 + pos[1];
        }
 
-       if (ie == NULL)
+       if (!found)
                return NULL; /* No specified vendor IE found */
 
        buf = wpabuf_alloc(ies_len);
@@ -588,13 +581,9 @@ struct wpabuf * ieee802_11_vendor_ie_concat(const u8 *ies, size_t ies_len,
         * There may be multiple vendor IEs in the message, so need to
         * concatenate their data fields.
         */
-       while (end - pos > 1) {
-               if (2 + pos[1] > end - pos)
-                       break;
-               if (pos[0] == WLAN_EID_VENDOR_SPECIFIC && pos[1] >= 4 &&
-                   WPA_GET_BE32(&pos[2]) == oui_type)
-                       wpabuf_put_data(buf, pos + 6, pos[1] - 4);
-               pos += 2 + pos[1];
+       for_each_element_id(elem, WLAN_EID_VENDOR_SPECIFIC, ies, ies_len) {
+               if (elem->datalen >= 4 && WPA_GET_BE32(elem->data) == oui_type)
+                       wpabuf_put_data(buf, elem->data + 4, elem->datalen - 4);
        }
 
        return buf;