mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2024-11-19 23:17:53 +01:00
mac80211: fix a race condition when bringing up wds sta interfaces on the ap
SVN-Revision: 18377
This commit is contained in:
parent
3f5c35c742
commit
c8c6f7ec39
@ -126,7 +126,7 @@
|
|||||||
return -1;
|
return -1;
|
||||||
return 0;
|
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;
|
return -ENOBUFS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,6 +139,7 @@
|
|||||||
+ if (val) {
|
+ if (val) {
|
||||||
+ if (nl80211_create_iface(priv, name, NL80211_IFTYPE_AP_VLAN, NULL, 1) < 0)
|
+ if (nl80211_create_iface(priv, name, NL80211_IFTYPE_AP_VLAN, NULL, 1) < 0)
|
||||||
+ return -1;
|
+ return -1;
|
||||||
|
+ hostapd_set_iface_flags(drv, name, 1);
|
||||||
+ return i802_set_sta_vlan(priv, addr, name, 0);
|
+ return i802_set_sta_vlan(priv, addr, name, 0);
|
||||||
+ } else {
|
+ } else {
|
||||||
+ i802_set_sta_vlan(priv, addr, drv->ifname, 0);
|
+ 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)
|
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_update = i802_if_update,
|
||||||
.if_remove = i802_if_remove,
|
.if_remove = i802_if_remove,
|
||||||
.set_sta_vlan = i802_set_sta_vlan,
|
.set_sta_vlan = i802_set_sta_vlan,
|
||||||
|
20
package/mac80211/patches/520-nl80211_vlan_add_fix.patch
Normal file
20
package/mac80211/patches/520-nl80211_vlan_add_fix.patch
Normal 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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user