From 43cbee8a99b3cf854e828edeb3abfbfba3e1b839 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Mon, 25 Feb 2008 16:27:42 +0100 Subject: [PATCH] --- yaml --- r: 89977 b: refs/heads/master c: e6a5ddf20886206caf1c4a2431f6ff01198ab0f7 h: refs/heads/master i: 89975: 4050db316f49372251ce7d85eac952fdcb14245a v: v3 --- [refs] | 2 +- trunk/net/mac80211/ieee80211_iface.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 6d6e529c5735..8768dbadfbdf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2485f7105f20f85c2dbebc67be6b2cb97175fa7e +refs/heads/master: e6a5ddf20886206caf1c4a2431f6ff01198ab0f7 diff --git a/trunk/net/mac80211/ieee80211_iface.c b/trunk/net/mac80211/ieee80211_iface.c index f66f1ddc3fda..0d6824bca92b 100644 --- a/trunk/net/mac80211/ieee80211_iface.c +++ b/trunk/net/mac80211/ieee80211_iface.c @@ -193,6 +193,7 @@ void ieee80211_if_reinit(struct net_device *dev) /* Remove all virtual interfaces that use this BSS * as their sdata->bss */ struct ieee80211_sub_if_data *tsdata, *n; + struct beacon_data *beacon; list_for_each_entry_safe(tsdata, n, &local->interfaces, list) { if (tsdata != sdata && tsdata->bss == &sdata->u.ap) { @@ -210,7 +211,10 @@ void ieee80211_if_reinit(struct net_device *dev) } } - kfree(sdata->u.ap.beacon); + beacon = sdata->u.ap.beacon; + rcu_assign_pointer(sdata->u.ap.beacon, NULL); + synchronize_rcu(); + kfree(beacon); while ((skb = skb_dequeue(&sdata->u.ap.ps_bc_buf))) { local->total_ps_buffered--;