mac80211: fix race in TKIP MIC test debugfs file
authorJohannes Berg <johannes.berg@intel.com>
Mon, 5 Nov 2012 19:27:57 +0000 (20:27 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 7 Nov 2012 17:01:39 +0000 (18:01 +0100)
Accessing sdata->vif.bss_conf.bssid without any
protection here is racy, use u.mgd.associated
instead and lock the correct mutex for it.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/debugfs_netdev.c

index 4b68ec770bdd0d9de020e7abb47ec55cbc64c1be..99ce871bfcf920f9f0a6b11faa285964bd93b844 100644 (file)
@@ -284,13 +284,16 @@ static ssize_t ieee80211_if_parse_tkip_mic_test(
        case NL80211_IFTYPE_STATION:
                fc |= cpu_to_le16(IEEE80211_FCTL_TODS);
                /* BSSID SA DA */
-               if (sdata->vif.bss_conf.bssid == NULL) {
+               mutex_lock(&sdata->u.mgd.mtx);
+               if (!sdata->u.mgd.associated) {
+                       mutex_unlock(&sdata->u.mgd.mtx);
                        dev_kfree_skb(skb);
                        return -ENOTCONN;
                }
-               memcpy(hdr->addr1, sdata->vif.bss_conf.bssid, ETH_ALEN);
+               memcpy(hdr->addr1, sdata->u.mgd.associated->bssid, ETH_ALEN);
                memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN);
                memcpy(hdr->addr3, addr, ETH_ALEN);
+               mutex_unlock(&sdata->u.mgd.mtx);
                break;
        default:
                dev_kfree_skb(skb);