]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - drivers/net/wireless/wl12xx/scan.c
wl12xx: ignore sched scan match sets without SSID
[mirror_ubuntu-artful-kernel.git] / drivers / net / wireless / wl12xx / scan.c
index 488033b2a39b70844b6d0d3362da0b7a52c46c00..eeccc9f095bb28cb5e4ff408b1ea6453e210265d 100644 (file)
@@ -479,12 +479,17 @@ wl12xx_scan_sched_scan_ssid_list(struct wl1271 *wl,
        struct wl1271_cmd_sched_scan_ssid_list *cmd = NULL;
        struct cfg80211_match_set *sets = req->match_sets;
        struct cfg80211_ssid *ssids = req->ssids;
-       int ret = 0, type, i, j;
+       int ret = 0, type, i, j, n_match_ssids = 0;
 
        wl1271_debug(DEBUG_CMD, "cmd sched scan ssid list");
 
+       /* count the match sets that contain SSIDs */
+       for (i = 0; i < req->n_match_sets; i++)
+               if (sets[i].ssid.ssid_len > 0)
+                       n_match_ssids++;
+
        /* No filter, no ssids or only bcast ssid */
-       if (!req->n_match_sets &&
+       if (!n_match_ssids &&
            (!req->n_ssids ||
             (req->n_ssids == 1 && req->ssids[0].ssid_len == 0))) {
                type = SCAN_SSID_FILTER_ANY;
@@ -497,7 +502,7 @@ wl12xx_scan_sched_scan_ssid_list(struct wl1271 *wl,
                goto out;
        }
 
-       if (!req->n_match_sets) {
+       if (!n_match_ssids) {
                /* No filter, with ssids */
                type = SCAN_SSID_FILTER_DISABLED;
 
@@ -514,6 +519,10 @@ wl12xx_scan_sched_scan_ssid_list(struct wl1271 *wl,
 
                /* Add all SSIDs from the filters */
                for (i = 0; i < req->n_match_sets; i++) {
+                       /* ignore sets without SSIDs */
+                       if (!sets[i].ssid.ssid_len)
+                               continue;
+
                        cmd->ssids[cmd->n_ssids].type = SCAN_SSID_TYPE_PUBLIC;
                        cmd->ssids[cmd->n_ssids].len = sets[i].ssid.ssid_len;
                        memcpy(cmd->ssids[cmd->n_ssids].ssid,