nl80211: do not block when driver aborts scan
authorOlof Sivertsson <olof.sivertsson@zenterio.com>
Wed, 17 Jan 2018 12:32:09 +0000 (13:32 +0100)
committerJo-Philipp Wich <jo@mein.io>
Wed, 17 Jan 2018 12:34:08 +0000 (13:34 +0100)
Drivers may abort a scan by calling cfg80211_scan_done() with a struct
cfg80211_scan_info that sets aborted to true.

To avoid blocking forever consider both NL80211_CMD_NEW_SCAN_RESULTS
and NL80211_CMD_SCAN_ABORTED when waiting for scan results.

Tested with Broadcom's bcmdhd driver.

Signed-off-by: Olof Sivertsson <olof.sivertsson@zenterio.com>
[rebased on top of variadic nl80211_wait()]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
iwinfo_nl80211.c

index 895b6ee..99177e7 100644 (file)
@@ -2103,7 +2103,8 @@ static int nl80211_get_scanlist_nl(const char *ifname, char *buf, int *len)
        if (nl80211_request(ifname, NL80211_CMD_TRIGGER_SCAN, 0, NULL, NULL))
                goto out;
 
        if (nl80211_request(ifname, NL80211_CMD_TRIGGER_SCAN, 0, NULL, NULL))
                goto out;
 
-       if (nl80211_wait("nl80211", "scan", NL80211_CMD_NEW_SCAN_RESULTS))
+       if (nl80211_wait("nl80211", "scan",
+                        NL80211_CMD_NEW_SCAN_RESULTS, NL80211_CMD_SCAN_ABORTED))
                goto out;
 
        if (nl80211_request(ifname, NL80211_CMD_GET_SCAN, NLM_F_DUMP,
                goto out;
 
        if (nl80211_request(ifname, NL80211_CMD_GET_SCAN, NLM_F_DUMP,