diff options
author | adrian <adrian@FreeBSD.org> | 2012-08-27 23:18:41 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2012-08-27 23:18:41 +0000 |
commit | 6e9c7f034b944ddd8a4310f38a10c5f7d0c341c0 (patch) | |
tree | 0f4db13f3fb968d52296519b8a7afd978b0f1b63 /sys/dev/wtap | |
parent | f4bd2995f88e913cab16ca2b3df98a145234eae2 (diff) | |
download | FreeBSD-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.c | 12 |
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; } |