2009-03-20 19:24:06

by Jouni Malinen

[permalink] [raw]
Subject: [PATCH 3/4] nl80211: Check that netif_runnin is true in cfg80211 code

We do not want to require all the drivers using cfg80211 to need to do
this or to be prepared to handle these commands when the interface is
down.

Signed-off-by: Jouni Malinen <[email protected]>

---
net/mac80211/cfg.c | 25 -------------------------
net/wireless/nl80211.c | 40 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 40 insertions(+), 25 deletions(-)

--- uml.orig/net/mac80211/cfg.c 2009-03-20 18:03:53.000000000 +0200
+++ uml/net/mac80211/cfg.c 2009-03-20 18:03:59.000000000 +0200
@@ -728,10 +728,6 @@ static int ieee80211_add_station(struct
int err;
int layer2_update;

- /* Prevent a race with changing the rate control algorithm */
- if (!netif_running(dev))
- return -ENETDOWN;
-
if (params->vlan) {
sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);

@@ -860,9 +856,6 @@ static int ieee80211_add_mpath(struct wi
struct sta_info *sta;
int err;

- if (!netif_running(dev))
- return -ENETDOWN;
-
sdata = IEEE80211_DEV_TO_SUB_IF(dev);

if (sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
@@ -913,9 +906,6 @@ static int ieee80211_change_mpath(struct
struct mesh_path *mpath;
struct sta_info *sta;

- if (!netif_running(dev))
- return -ENETDOWN;
-
sdata = IEEE80211_DEV_TO_SUB_IF(dev);

if (sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
@@ -1202,9 +1192,6 @@ static int ieee80211_scan(struct wiphy *
{
struct ieee80211_sub_if_data *sdata;

- if (!netif_running(dev))
- return -ENETDOWN;
-
sdata = IEEE80211_DEV_TO_SUB_IF(dev);

if (sdata->vif.type != NL80211_IFTYPE_STATION &&
@@ -1220,9 +1207,6 @@ static int ieee80211_auth(struct wiphy *
{
struct ieee80211_sub_if_data *sdata;

- if (!netif_running(dev))
- return -ENETDOWN;
-
sdata = IEEE80211_DEV_TO_SUB_IF(dev);

if (sdata->vif.type != NL80211_IFTYPE_STATION)
@@ -1282,9 +1266,6 @@ static int ieee80211_assoc(struct wiphy
struct ieee80211_sub_if_data *sdata;
int ret;

- if (!netif_running(dev))
- return -ENETDOWN;
-
sdata = IEEE80211_DEV_TO_SUB_IF(dev);

if (sdata->vif.type != NL80211_IFTYPE_STATION)
@@ -1323,9 +1304,6 @@ static int ieee80211_deauth(struct wiphy
{
struct ieee80211_sub_if_data *sdata;

- if (!netif_running(dev))
- return -ENETDOWN;
-
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
if (sdata->vif.type != NL80211_IFTYPE_STATION)
return -EOPNOTSUPP;
@@ -1339,9 +1317,6 @@ static int ieee80211_disassoc(struct wip
{
struct ieee80211_sub_if_data *sdata;

- if (!netif_running(dev))
- return -ENETDOWN;
-
sdata = IEEE80211_DEV_TO_SUB_IF(dev);

if (sdata->vif.type != NL80211_IFTYPE_STATION)
--- uml.orig/net/wireless/nl80211.c 2009-03-20 18:03:57.000000000 +0200
+++ uml/net/wireless/nl80211.c 2009-03-20 18:03:59.000000000 +0200
@@ -1556,6 +1556,11 @@ static int nl80211_new_station(struct sk
goto out;
}

+ if (!netif_running(dev)) {
+ err = -ENETDOWN;
+ goto out;
+ }
+
err = drv->ops->add_station(&drv->wiphy, dev, mac_addr, &params);

out:
@@ -1808,6 +1813,11 @@ static int nl80211_set_mpath(struct sk_b
goto out;
}

+ if (!netif_running(dev)) {
+ err = -ENETDOWN;
+ goto out;
+ }
+
err = drv->ops->change_mpath(&drv->wiphy, dev, dst, next_hop);

out:
@@ -1846,6 +1856,11 @@ static int nl80211_new_mpath(struct sk_b
goto out;
}

+ if (!netif_running(dev)) {
+ err = -ENETDOWN;
+ goto out;
+ }
+
err = drv->ops->add_mpath(&drv->wiphy, dev, dst, next_hop);

out:
@@ -2380,6 +2395,11 @@ static int nl80211_trigger_scan(struct s
goto out;
}

+ if (!netif_running(dev)) {
+ err = -ENETDOWN;
+ goto out;
+ }
+
if (drv->scan_req) {
err = -EBUSY;
goto out;
@@ -2641,6 +2661,11 @@ static int nl80211_authenticate(struct s
goto out;
}

+ if (!netif_running(dev)) {
+ err = -ENETDOWN;
+ goto out;
+ }
+
if (!info->attrs[NL80211_ATTR_MAC]) {
err = -EINVAL;
goto out;
@@ -2709,6 +2734,11 @@ static int nl80211_associate(struct sk_b
goto out;
}

+ if (!netif_running(dev)) {
+ err = -ENETDOWN;
+ goto out;
+ }
+
if (!info->attrs[NL80211_ATTR_MAC] ||
!info->attrs[NL80211_ATTR_SSID]) {
err = -EINVAL;
@@ -2767,6 +2797,11 @@ static int nl80211_deauthenticate(struct
goto out;
}

+ if (!netif_running(dev)) {
+ err = -ENETDOWN;
+ goto out;
+ }
+
if (!info->attrs[NL80211_ATTR_MAC]) {
err = -EINVAL;
goto out;
@@ -2821,6 +2856,11 @@ static int nl80211_disassociate(struct s
goto out;
}

+ if (!netif_running(dev)) {
+ err = -ENETDOWN;
+ goto out;
+ }
+
if (!info->attrs[NL80211_ATTR_MAC]) {
err = -EINVAL;
goto out;

--

--
Jouni Malinen PGP id EFC895FA


2009-03-21 08:05:36

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH 3/4] nl80211: Check that netif_runnin is true in cfg80211 code

On Fri, 2009-03-20 at 21:21 +0200, Jouni Malinen wrote:
> plain text document attachment (nl80211-check-netif-running.patch)
> We do not want to require all the drivers using cfg80211 to need to do
> this or to be prepared to handle these commands when the interface is
> down.
>
> Signed-off-by: Jouni Malinen <[email protected]>

Thanks a lot, Jouni.

Acked-by: Johannes Berg <[email protected]>

> ---
> net/mac80211/cfg.c | 25 -------------------------
> net/wireless/nl80211.c | 40 ++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 40 insertions(+), 25 deletions(-)
>
> --- uml.orig/net/mac80211/cfg.c 2009-03-20 18:03:53.000000000 +0200
> +++ uml/net/mac80211/cfg.c 2009-03-20 18:03:59.000000000 +0200
> @@ -728,10 +728,6 @@ static int ieee80211_add_station(struct
> int err;
> int layer2_update;
>
> - /* Prevent a race with changing the rate control algorithm */
> - if (!netif_running(dev))
> - return -ENETDOWN;
> -
> if (params->vlan) {
> sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
>
> @@ -860,9 +856,6 @@ static int ieee80211_add_mpath(struct wi
> struct sta_info *sta;
> int err;
>
> - if (!netif_running(dev))
> - return -ENETDOWN;
> -
> sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>
> if (sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
> @@ -913,9 +906,6 @@ static int ieee80211_change_mpath(struct
> struct mesh_path *mpath;
> struct sta_info *sta;
>
> - if (!netif_running(dev))
> - return -ENETDOWN;
> -
> sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>
> if (sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
> @@ -1202,9 +1192,6 @@ static int ieee80211_scan(struct wiphy *
> {
> struct ieee80211_sub_if_data *sdata;
>
> - if (!netif_running(dev))
> - return -ENETDOWN;
> -
> sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>
> if (sdata->vif.type != NL80211_IFTYPE_STATION &&
> @@ -1220,9 +1207,6 @@ static int ieee80211_auth(struct wiphy *
> {
> struct ieee80211_sub_if_data *sdata;
>
> - if (!netif_running(dev))
> - return -ENETDOWN;
> -
> sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>
> if (sdata->vif.type != NL80211_IFTYPE_STATION)
> @@ -1282,9 +1266,6 @@ static int ieee80211_assoc(struct wiphy
> struct ieee80211_sub_if_data *sdata;
> int ret;
>
> - if (!netif_running(dev))
> - return -ENETDOWN;
> -
> sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>
> if (sdata->vif.type != NL80211_IFTYPE_STATION)
> @@ -1323,9 +1304,6 @@ static int ieee80211_deauth(struct wiphy
> {
> struct ieee80211_sub_if_data *sdata;
>
> - if (!netif_running(dev))
> - return -ENETDOWN;
> -
> sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> if (sdata->vif.type != NL80211_IFTYPE_STATION)
> return -EOPNOTSUPP;
> @@ -1339,9 +1317,6 @@ static int ieee80211_disassoc(struct wip
> {
> struct ieee80211_sub_if_data *sdata;
>
> - if (!netif_running(dev))
> - return -ENETDOWN;
> -
> sdata = IEEE80211_DEV_TO_SUB_IF(dev);
>
> if (sdata->vif.type != NL80211_IFTYPE_STATION)
> --- uml.orig/net/wireless/nl80211.c 2009-03-20 18:03:57.000000000 +0200
> +++ uml/net/wireless/nl80211.c 2009-03-20 18:03:59.000000000 +0200
> @@ -1556,6 +1556,11 @@ static int nl80211_new_station(struct sk
> goto out;
> }
>
> + if (!netif_running(dev)) {
> + err = -ENETDOWN;
> + goto out;
> + }
> +
> err = drv->ops->add_station(&drv->wiphy, dev, mac_addr, &params);
>
> out:
> @@ -1808,6 +1813,11 @@ static int nl80211_set_mpath(struct sk_b
> goto out;
> }
>
> + if (!netif_running(dev)) {
> + err = -ENETDOWN;
> + goto out;
> + }
> +
> err = drv->ops->change_mpath(&drv->wiphy, dev, dst, next_hop);
>
> out:
> @@ -1846,6 +1856,11 @@ static int nl80211_new_mpath(struct sk_b
> goto out;
> }
>
> + if (!netif_running(dev)) {
> + err = -ENETDOWN;
> + goto out;
> + }
> +
> err = drv->ops->add_mpath(&drv->wiphy, dev, dst, next_hop);
>
> out:
> @@ -2380,6 +2395,11 @@ static int nl80211_trigger_scan(struct s
> goto out;
> }
>
> + if (!netif_running(dev)) {
> + err = -ENETDOWN;
> + goto out;
> + }
> +
> if (drv->scan_req) {
> err = -EBUSY;
> goto out;
> @@ -2641,6 +2661,11 @@ static int nl80211_authenticate(struct s
> goto out;
> }
>
> + if (!netif_running(dev)) {
> + err = -ENETDOWN;
> + goto out;
> + }
> +
> if (!info->attrs[NL80211_ATTR_MAC]) {
> err = -EINVAL;
> goto out;
> @@ -2709,6 +2734,11 @@ static int nl80211_associate(struct sk_b
> goto out;
> }
>
> + if (!netif_running(dev)) {
> + err = -ENETDOWN;
> + goto out;
> + }
> +
> if (!info->attrs[NL80211_ATTR_MAC] ||
> !info->attrs[NL80211_ATTR_SSID]) {
> err = -EINVAL;
> @@ -2767,6 +2797,11 @@ static int nl80211_deauthenticate(struct
> goto out;
> }
>
> + if (!netif_running(dev)) {
> + err = -ENETDOWN;
> + goto out;
> + }
> +
> if (!info->attrs[NL80211_ATTR_MAC]) {
> err = -EINVAL;
> goto out;
> @@ -2821,6 +2856,11 @@ static int nl80211_disassociate(struct s
> goto out;
> }
>
> + if (!netif_running(dev)) {
> + err = -ENETDOWN;
> + goto out;
> + }
> +
> if (!info->attrs[NL80211_ATTR_MAC]) {
> err = -EINVAL;
> goto out;
>
> --
>


Attachments:
signature.asc (836.00 B)
This is a digitally signed message part