Loading net/wireless/core.c +2 −0 Original line number Original line Diff line number Diff line Loading @@ -990,7 +990,9 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb, return notifier_from_errno(-EOPNOTSUPP); return notifier_from_errno(-EOPNOTSUPP); if (rfkill_blocked(rdev->rfkill)) if (rfkill_blocked(rdev->rfkill)) return notifier_from_errno(-ERFKILL); return notifier_from_errno(-ERFKILL); mutex_lock(&rdev->devlist_mtx); ret = cfg80211_can_add_interface(rdev, wdev->iftype); ret = cfg80211_can_add_interface(rdev, wdev->iftype); mutex_unlock(&rdev->devlist_mtx); if (ret) if (ret) return notifier_from_errno(ret); return notifier_from_errno(ret); cfg80211_lock_rdev(rdev); cfg80211_lock_rdev(rdev); Loading net/wireless/ibss.c +10 −0 Original line number Original line Diff line number Diff line Loading @@ -118,6 +118,16 @@ int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev, wdev->wext.ibss.channel = params->channel; wdev->wext.ibss.channel = params->channel; #endif #endif wdev->sme_state = CFG80211_SME_CONNECTING; wdev->sme_state = CFG80211_SME_CONNECTING; err = cfg80211_can_use_chan(rdev, wdev, params->channel, params->channel_fixed ? CHAN_MODE_SHARED : CHAN_MODE_EXCLUSIVE); if (err) { wdev->connect_keys = NULL; return err; } err = rdev->ops->join_ibss(&rdev->wiphy, dev, params); err = rdev->ops->join_ibss(&rdev->wiphy, dev, params); if (err) { if (err) { wdev->connect_keys = NULL; wdev->connect_keys = NULL; Loading net/wireless/mesh.c +12 −0 Original line number Original line Diff line number Diff line Loading @@ -155,6 +155,11 @@ int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev, setup->channel_type)) setup->channel_type)) return -EINVAL; return -EINVAL; err = cfg80211_can_use_chan(rdev, wdev, setup->channel, CHAN_MODE_SHARED); if (err) return err; err = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); err = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); if (!err) { if (!err) { memcpy(wdev->ssid, setup->mesh_id, setup->mesh_id_len); memcpy(wdev->ssid, setup->mesh_id, setup->mesh_id_len); Loading @@ -173,9 +178,11 @@ int cfg80211_join_mesh(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev = dev->ieee80211_ptr; struct wireless_dev *wdev = dev->ieee80211_ptr; int err; int err; mutex_lock(&rdev->devlist_mtx); wdev_lock(wdev); wdev_lock(wdev); err = __cfg80211_join_mesh(rdev, dev, setup, conf); err = __cfg80211_join_mesh(rdev, dev, setup, conf); wdev_unlock(wdev); wdev_unlock(wdev); mutex_unlock(&rdev->devlist_mtx); return err; return err; } } Loading Loading @@ -208,6 +215,11 @@ int cfg80211_set_mesh_freq(struct cfg80211_registered_device *rdev, if (!netif_running(wdev->netdev)) if (!netif_running(wdev->netdev)) return -ENETDOWN; return -ENETDOWN; err = cfg80211_can_use_chan(rdev, wdev, channel, CHAN_MODE_SHARED); if (err) return err; err = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, err = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, wdev->netdev, wdev->netdev, channel); channel); Loading net/wireless/mlme.c +16 −0 Original line number Original line Diff line number Diff line Loading @@ -302,8 +302,14 @@ int __cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, if (!req.bss) if (!req.bss) return -ENOENT; return -ENOENT; err = cfg80211_can_use_chan(rdev, wdev, req.bss->channel, CHAN_MODE_SHARED); if (err) goto out; err = rdev->ops->auth(&rdev->wiphy, dev, &req); err = rdev->ops->auth(&rdev->wiphy, dev, &req); out: cfg80211_put_bss(req.bss); cfg80211_put_bss(req.bss); return err; return err; } } Loading @@ -317,11 +323,13 @@ int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, { { int err; int err; mutex_lock(&rdev->devlist_mtx); wdev_lock(dev->ieee80211_ptr); wdev_lock(dev->ieee80211_ptr); err = __cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, err = __cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, ssid, ssid_len, ie, ie_len, ssid, ssid_len, ie, ie_len, key, key_len, key_idx); key, key_len, key_idx); wdev_unlock(dev->ieee80211_ptr); wdev_unlock(dev->ieee80211_ptr); mutex_unlock(&rdev->devlist_mtx); return err; return err; } } Loading Loading @@ -397,8 +405,14 @@ int __cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, return -ENOENT; return -ENOENT; } } err = cfg80211_can_use_chan(rdev, wdev, req.bss->channel, CHAN_MODE_SHARED); if (err) goto out; err = rdev->ops->assoc(&rdev->wiphy, dev, &req); err = rdev->ops->assoc(&rdev->wiphy, dev, &req); out: if (err) { if (err) { if (was_connected) if (was_connected) wdev->sme_state = CFG80211_SME_CONNECTED; wdev->sme_state = CFG80211_SME_CONNECTED; Loading @@ -421,11 +435,13 @@ int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev = dev->ieee80211_ptr; struct wireless_dev *wdev = dev->ieee80211_ptr; int err; int err; mutex_lock(&rdev->devlist_mtx); wdev_lock(wdev); wdev_lock(wdev); err = __cfg80211_mlme_assoc(rdev, dev, chan, bssid, prev_bssid, err = __cfg80211_mlme_assoc(rdev, dev, chan, bssid, prev_bssid, ssid, ssid_len, ie, ie_len, use_mfp, crypt, ssid, ssid_len, ie, ie_len, use_mfp, crypt, assoc_flags, ht_capa, ht_capa_mask); assoc_flags, ht_capa, ht_capa_mask); wdev_unlock(wdev); wdev_unlock(wdev); mutex_unlock(&rdev->devlist_mtx); return err; return err; } } Loading net/wireless/nl80211.c +8 −0 Original line number Original line Diff line number Diff line Loading @@ -2478,6 +2478,14 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info) params.channel_type)) params.channel_type)) return -EINVAL; return -EINVAL; mutex_lock(&rdev->devlist_mtx); err = cfg80211_can_use_chan(rdev, wdev, params.channel, CHAN_MODE_SHARED); mutex_unlock(&rdev->devlist_mtx); if (err) return err; err = rdev->ops->start_ap(&rdev->wiphy, dev, ¶ms); err = rdev->ops->start_ap(&rdev->wiphy, dev, ¶ms); if (!err) { if (!err) { wdev->preset_chan = params.channel; wdev->preset_chan = params.channel; Loading Loading
net/wireless/core.c +2 −0 Original line number Original line Diff line number Diff line Loading @@ -990,7 +990,9 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb, return notifier_from_errno(-EOPNOTSUPP); return notifier_from_errno(-EOPNOTSUPP); if (rfkill_blocked(rdev->rfkill)) if (rfkill_blocked(rdev->rfkill)) return notifier_from_errno(-ERFKILL); return notifier_from_errno(-ERFKILL); mutex_lock(&rdev->devlist_mtx); ret = cfg80211_can_add_interface(rdev, wdev->iftype); ret = cfg80211_can_add_interface(rdev, wdev->iftype); mutex_unlock(&rdev->devlist_mtx); if (ret) if (ret) return notifier_from_errno(ret); return notifier_from_errno(ret); cfg80211_lock_rdev(rdev); cfg80211_lock_rdev(rdev); Loading
net/wireless/ibss.c +10 −0 Original line number Original line Diff line number Diff line Loading @@ -118,6 +118,16 @@ int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev, wdev->wext.ibss.channel = params->channel; wdev->wext.ibss.channel = params->channel; #endif #endif wdev->sme_state = CFG80211_SME_CONNECTING; wdev->sme_state = CFG80211_SME_CONNECTING; err = cfg80211_can_use_chan(rdev, wdev, params->channel, params->channel_fixed ? CHAN_MODE_SHARED : CHAN_MODE_EXCLUSIVE); if (err) { wdev->connect_keys = NULL; return err; } err = rdev->ops->join_ibss(&rdev->wiphy, dev, params); err = rdev->ops->join_ibss(&rdev->wiphy, dev, params); if (err) { if (err) { wdev->connect_keys = NULL; wdev->connect_keys = NULL; Loading
net/wireless/mesh.c +12 −0 Original line number Original line Diff line number Diff line Loading @@ -155,6 +155,11 @@ int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev, setup->channel_type)) setup->channel_type)) return -EINVAL; return -EINVAL; err = cfg80211_can_use_chan(rdev, wdev, setup->channel, CHAN_MODE_SHARED); if (err) return err; err = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); err = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup); if (!err) { if (!err) { memcpy(wdev->ssid, setup->mesh_id, setup->mesh_id_len); memcpy(wdev->ssid, setup->mesh_id, setup->mesh_id_len); Loading @@ -173,9 +178,11 @@ int cfg80211_join_mesh(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev = dev->ieee80211_ptr; struct wireless_dev *wdev = dev->ieee80211_ptr; int err; int err; mutex_lock(&rdev->devlist_mtx); wdev_lock(wdev); wdev_lock(wdev); err = __cfg80211_join_mesh(rdev, dev, setup, conf); err = __cfg80211_join_mesh(rdev, dev, setup, conf); wdev_unlock(wdev); wdev_unlock(wdev); mutex_unlock(&rdev->devlist_mtx); return err; return err; } } Loading Loading @@ -208,6 +215,11 @@ int cfg80211_set_mesh_freq(struct cfg80211_registered_device *rdev, if (!netif_running(wdev->netdev)) if (!netif_running(wdev->netdev)) return -ENETDOWN; return -ENETDOWN; err = cfg80211_can_use_chan(rdev, wdev, channel, CHAN_MODE_SHARED); if (err) return err; err = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, err = rdev->ops->libertas_set_mesh_channel(&rdev->wiphy, wdev->netdev, wdev->netdev, channel); channel); Loading
net/wireless/mlme.c +16 −0 Original line number Original line Diff line number Diff line Loading @@ -302,8 +302,14 @@ int __cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, if (!req.bss) if (!req.bss) return -ENOENT; return -ENOENT; err = cfg80211_can_use_chan(rdev, wdev, req.bss->channel, CHAN_MODE_SHARED); if (err) goto out; err = rdev->ops->auth(&rdev->wiphy, dev, &req); err = rdev->ops->auth(&rdev->wiphy, dev, &req); out: cfg80211_put_bss(req.bss); cfg80211_put_bss(req.bss); return err; return err; } } Loading @@ -317,11 +323,13 @@ int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, { { int err; int err; mutex_lock(&rdev->devlist_mtx); wdev_lock(dev->ieee80211_ptr); wdev_lock(dev->ieee80211_ptr); err = __cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, err = __cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, ssid, ssid_len, ie, ie_len, ssid, ssid_len, ie, ie_len, key, key_len, key_idx); key, key_len, key_idx); wdev_unlock(dev->ieee80211_ptr); wdev_unlock(dev->ieee80211_ptr); mutex_unlock(&rdev->devlist_mtx); return err; return err; } } Loading Loading @@ -397,8 +405,14 @@ int __cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, return -ENOENT; return -ENOENT; } } err = cfg80211_can_use_chan(rdev, wdev, req.bss->channel, CHAN_MODE_SHARED); if (err) goto out; err = rdev->ops->assoc(&rdev->wiphy, dev, &req); err = rdev->ops->assoc(&rdev->wiphy, dev, &req); out: if (err) { if (err) { if (was_connected) if (was_connected) wdev->sme_state = CFG80211_SME_CONNECTED; wdev->sme_state = CFG80211_SME_CONNECTED; Loading @@ -421,11 +435,13 @@ int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev = dev->ieee80211_ptr; struct wireless_dev *wdev = dev->ieee80211_ptr; int err; int err; mutex_lock(&rdev->devlist_mtx); wdev_lock(wdev); wdev_lock(wdev); err = __cfg80211_mlme_assoc(rdev, dev, chan, bssid, prev_bssid, err = __cfg80211_mlme_assoc(rdev, dev, chan, bssid, prev_bssid, ssid, ssid_len, ie, ie_len, use_mfp, crypt, ssid, ssid_len, ie, ie_len, use_mfp, crypt, assoc_flags, ht_capa, ht_capa_mask); assoc_flags, ht_capa, ht_capa_mask); wdev_unlock(wdev); wdev_unlock(wdev); mutex_unlock(&rdev->devlist_mtx); return err; return err; } } Loading
net/wireless/nl80211.c +8 −0 Original line number Original line Diff line number Diff line Loading @@ -2478,6 +2478,14 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info) params.channel_type)) params.channel_type)) return -EINVAL; return -EINVAL; mutex_lock(&rdev->devlist_mtx); err = cfg80211_can_use_chan(rdev, wdev, params.channel, CHAN_MODE_SHARED); mutex_unlock(&rdev->devlist_mtx); if (err) return err; err = rdev->ops->start_ap(&rdev->wiphy, dev, ¶ms); err = rdev->ops->start_ap(&rdev->wiphy, dev, ¶ms); if (!err) { if (!err) { wdev->preset_chan = params.channel; wdev->preset_chan = params.channel; Loading