P2PS: Fix p2p_find last parameter handling
authorStepanov, Max <Max.Stepanov@intel.com>
Tue, 23 Jun 2015 13:52:22 +0000 (13:52 +0000)
committerJouni Malinen <j@w1.fi>
Sat, 27 Jun 2015 20:49:15 +0000 (23:49 +0300)
In p2p_find command line processing a loop searching for multiple
'seek=' parameters modifies cmd buffer adding '\0' terminators.
The 'freq=' parameter is handled after that and can be
lost if a 'freq=' follows 'seek=' in a command line.
Fix it by moving a handling of 'freq=' parameter to be processed
before 'seek=' handling loop.

Signed-off-by: Max Stepanov <Max.Stepanov@intel.com>
wpa_supplicant/ctrl_iface.c

index 0c5ea8f..d0d70e9 100644 (file)
@@ -4595,6 +4595,14 @@ static int p2p_ctrl_find(struct wpa_supplicant *wpa_s, char *cmd)
        } else
                search_delay = wpas_p2p_search_delay(wpa_s);
 
+       pos = os_strstr(cmd, "freq=");
+       if (pos) {
+               pos += 5;
+               freq = atoi(pos);
+               if (freq <= 0)
+                       return -1;
+       }
+
        /* Must be searched for last, because it adds nul termination */
        pos = os_strstr(cmd, " seek=");
        if (pos)
@@ -4617,14 +4625,6 @@ static int p2p_ctrl_find(struct wpa_supplicant *wpa_s, char *cmd)
                seek_count = 1;
        }
 
-       pos = os_strstr(cmd, "freq=");
-       if (pos) {
-               pos += 5;
-               freq = atoi(pos);
-               if (freq <= 0)
-                       return -1;
-       }
-
        return wpas_p2p_find(wpa_s, timeout, type, _dev_type != NULL, _dev_type,
                             _dev_id, search_delay, seek_count, seek, freq);
 }