]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
ctrl_iface: BSS command to skip info items if parsing fails
authorJonathan Afek <jonathan@wizery.com>
Tue, 14 Jun 2016 10:31:18 +0000 (13:31 +0300)
committerJouni Malinen <j@w1.fi>
Sun, 19 Jun 2016 20:48:07 +0000 (23:48 +0300)
In some cases parsing of the mesh scan info for a BSS or the P2P scan
info can fail. One reason can be that the Beacon/Probe Response frame
contained malformed length vendor IEs which are not parsed when adding
to the BSS table. Instead of skipping the whole BSS of the BSS command,
just skip the part that failed to parse.

Signed-off-by: Jonathan Afek <jonathanx.afek@intel.com>
wpa_supplicant/ctrl_iface.c

index e75f1ae443c529724854fd21bddac3885e4f64d2..eb1e40a8851ec348c4bcf0de4f749c47a84354a4 100644 (file)
@@ -4298,9 +4298,10 @@ static int print_bss_info(struct wpa_supplicant *wpa_s, struct wpa_bss *bss,
        if (mask & WPA_BSS_MASK_P2P_SCAN) {
                ie = (const u8 *) (bss + 1);
                ret = wpas_p2p_scan_result_text(ie, bss->ie_len, pos, end);
-               if (ret < 0 || ret >= end - pos)
+               if (ret >= end - pos)
                        return 0;
-               pos += ret;
+               if (ret > 0)
+                       pos += ret;
        }
 #endif /* CONFIG_P2P */
 
@@ -4381,9 +4382,10 @@ static int print_bss_info(struct wpa_supplicant *wpa_s, struct wpa_bss *bss,
        if (mask & WPA_BSS_MASK_MESH_SCAN) {
                ie = (const u8 *) (bss + 1);
                ret = wpas_mesh_scan_result_text(ie, bss->ie_len, pos, end);
-               if (ret < 0 || ret >= end - pos)
+               if (ret >= end - pos)
                        return 0;
-               pos += ret;
+               if (ret > 0)
+                       pos += ret;
        }
 #endif /* CONFIG_MESH */