nl80211: don't assume wdev->netdev exists
authorJohannes Berg <johannes.berg@intel.com>
Fri, 15 Jun 2012 16:00:00 +0000 (18:00 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 9 Jul 2012 12:51:46 +0000 (14:51 +0200)
There are a few places that iterate the wdev
list and assume wdev->netdev exists, check
there. The rfkill one has to be extended for
each non-netdev type later.

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

index b110a8a242db6ff3b52adb2ffeaa47dc190ea52e..2781a411cecc379b2fe9807ee6bb3bc70886c9ac 100644 (file)
@@ -177,6 +177,8 @@ int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
                return -EOPNOTSUPP;
 
        list_for_each_entry(wdev, &rdev->wdev_list, list) {
+               if (!wdev->netdev)
+                       continue;
                wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL;
                err = dev_change_net_namespace(wdev->netdev, net, "wlan%d");
                if (err)
@@ -190,6 +192,8 @@ int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
 
                list_for_each_entry_continue_reverse(wdev, &rdev->wdev_list,
                                                     list) {
+                       if (!wdev->netdev)
+                               continue;
                        wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL;
                        err = dev_change_net_namespace(wdev->netdev, net,
                                                        "wlan%d");
@@ -227,7 +231,8 @@ static int cfg80211_rfkill_set_block(void *data, bool blocked)
        mutex_lock(&rdev->devlist_mtx);
 
        list_for_each_entry(wdev, &rdev->wdev_list, list)
-               dev_close(wdev->netdev);
+               if (wdev->netdev)
+                       dev_close(wdev->netdev);
 
        mutex_unlock(&rdev->devlist_mtx);
        rtnl_unlock();