summaryrefslogtreecommitdiffstats
path: root/sys/dev/wtap
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2012-08-27 23:18:41 +0000
committeradrian <adrian@FreeBSD.org>2012-08-27 23:18:41 +0000
commit6e9c7f034b944ddd8a4310f38a10c5f7d0c341c0 (patch)
tree0f4db13f3fb968d52296519b8a7afd978b0f1b63 /sys/dev/wtap
parentf4bd2995f88e913cab16ca2b3df98a145234eae2 (diff)
downloadFreeBSD-src-6e9c7f034b944ddd8a4310f38a10c5f7d0c341c0.zip
FreeBSD-src-6e9c7f034b944ddd8a4310f38a10c5f7d0c341c0.tar.gz
Don't grab an unreferenced pointer to the VAP bss node.
Diffstat (limited to 'sys/dev/wtap')
-rw-r--r--sys/dev/wtap/if_wtap.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/dev/wtap/if_wtap.c b/sys/dev/wtap/if_wtap.c
index 9439930..6adc5b3 100644
--- a/sys/dev/wtap/if_wtap.c
+++ b/sys/dev/wtap/if_wtap.c
@@ -268,7 +268,7 @@ wtap_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
DWTAP_PRINTF("%s\n", __func__);
- ni = vap->iv_bss;
+ ni = ieee80211_ref_node(vap->iv_bss);
/*
* Invoke the parent method to do net80211 work.
*/
@@ -278,7 +278,8 @@ wtap_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
if (nstate == IEEE80211_S_RUN) {
/* NB: collect bss node again, it may have changed */
- ni = vap->iv_bss;
+ ieee80211_free_node(ni);
+ ni = ieee80211_ref_node(vap->iv_bss);
switch (vap->iv_opmode) {
case IEEE80211_M_MBSS:
error = wtap_beacon_alloc(sc, ni);
@@ -294,9 +295,11 @@ wtap_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
} else if (nstate == IEEE80211_S_INIT) {
callout_stop(&avp->av_swba);
}
+ ieee80211_free_node(ni);
return 0;
bad:
printf("%s: bad\n", __func__);
+ ieee80211_free_node(ni);
return error;
}
@@ -319,6 +322,7 @@ wtap_vap_create(struct ieee80211com *ic, const char name[IFNAMSIZ],
struct ieee80211vap *vap;
struct wtap_vap *avp;
int error;
+ struct ieee80211_node *ni;
DWTAP_PRINTF("%s\n", __func__);
@@ -347,7 +351,9 @@ wtap_vap_create(struct ieee80211com *ic, const char name[IFNAMSIZ],
(const char *)ic->ic_ifp->if_xname);
/* TODO this is a hack to force it to choose the rate we want */
- vap->iv_bss->ni_txrate = 130;
+ ni = ieee80211_ref_node(vap->iv_bss);
+ ni->ni_txrate = 130;
+ ieee80211_free_node(ni);
return vap;
}
OpenPOWER on IntegriCloud