cfg80211: allow set_interface without type
authorJohannes Berg <johannes@sipsolutions.net>
Tue, 16 Sep 2008 18:22:09 +0000 (20:22 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 24 Sep 2008 20:18:00 +0000 (16:18 -0400)
Which then causes no type change.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/wireless/nl80211.c

index 44771a6..a745932 100644 (file)
@@ -422,19 +422,20 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
 
        memset(&params, 0, sizeof(params));
 
-       if (info->attrs[NL80211_ATTR_IFTYPE]) {
-               type = nla_get_u32(info->attrs[NL80211_ATTR_IFTYPE]);
-               if (type > NL80211_IFTYPE_MAX)
-                       return -EINVAL;
-       } else
-               return -EINVAL;
-
        err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
        if (err)
                return err;
        ifindex = dev->ifindex;
+       type = dev->ieee80211_ptr->iftype;
        dev_put(dev);
 
+       err = -EINVAL;
+       if (info->attrs[NL80211_ATTR_IFTYPE]) {
+               type = nla_get_u32(info->attrs[NL80211_ATTR_IFTYPE]);
+               if (type > NL80211_IFTYPE_MAX)
+                       goto unlock;
+       }
+
        if (!drv->ops->change_virtual_intf ||
            !(drv->wiphy.interface_modes & (1 << type))) {
                err = -EOPNOTSUPP;