mac80211: fix a race condition when bringing up wds sta interfaces on the ap

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18377 3c298f89-4303-0410-b956-a3cf2f4a3e73
master
Felix Fietkau 2009-11-11 16:32:09 +00:00
parent 795f9b8a42
commit 7e5995898f
2 changed files with 23 additions and 2 deletions

View File

@ -126,7 +126,7 @@
return -1;
return 0;
}
@@ -4310,6 +4312,21 @@ static int i802_set_sta_vlan(void *priv,
@@ -4310,6 +4312,22 @@ static int i802_set_sta_vlan(void *priv,
return -ENOBUFS;
}
@ -139,6 +139,7 @@
+ if (val) {
+ if (nl80211_create_iface(priv, name, NL80211_IFTYPE_AP_VLAN, NULL, 1) < 0)
+ return -1;
+ hostapd_set_iface_flags(drv, name, 1);
+ return i802_set_sta_vlan(priv, addr, name, 0);
+ } else {
+ i802_set_sta_vlan(priv, addr, drv->ifname, 0);
@ -148,7 +149,7 @@
static void handle_eapol(int sock, void *eloop_ctx, void *sock_ctx)
{
@@ -4536,5 +4553,6 @@ const struct wpa_driver_ops wpa_driver_n
@@ -4536,5 +4554,6 @@ const struct wpa_driver_ops wpa_driver_n
.if_update = i802_if_update,
.if_remove = i802_if_remove,
.set_sta_vlan = i802_set_sta_vlan,

View File

@ -0,0 +1,20 @@
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -1813,7 +1813,7 @@ static int nl80211_get_station(struct sk
}
/*
- * Get vlan interface making sure it is on the right wiphy.
+ * Get vlan interface making sure it is running and on the right wiphy.
*/
static int get_vlan(struct genl_info *info,
struct cfg80211_registered_device *rdev,
@@ -1831,6 +1831,8 @@ static int get_vlan(struct genl_info *in
return -EINVAL;
if ((*vlan)->ieee80211_ptr->wiphy != &rdev->wiphy)
return -EINVAL;
+ if (!netif_running(*vlan))
+ return -ENETDOWN;
}
return 0;
}