Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Nov 2013 01:30:10 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r258612 - head/sys/dev/iwi
Message-ID:  <201311260130.rAQ1UADW031879@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Tue Nov 26 01:30:10 2013
New Revision: 258612
URL: http://svnweb.freebsd.org/changeset/base/258612

Log:
  The bssid can change from underneath us, so take a reference before
  we fiddle with it.

Modified:
  head/sys/dev/iwi/if_iwi.c

Modified: head/sys/dev/iwi/if_iwi.c
==============================================================================
--- head/sys/dev/iwi/if_iwi.c	Tue Nov 26 00:23:47 2013	(r258611)
+++ head/sys/dev/iwi/if_iwi.c	Tue Nov 26 01:30:10 2013	(r258612)
@@ -945,10 +945,13 @@ iwi_media_status(struct ifnet *ifp, stru
 	struct ieee80211vap *vap = ifp->if_softc;
 	struct ieee80211com *ic = vap->iv_ic;
 	struct iwi_softc *sc = ic->ic_ifp->if_softc;
+	struct ieee80211_node *ni;
 
 	/* read current transmission rate from adapter */
-	vap->iv_bss->ni_txrate =
+	ni = ieee80211_ref_node(vap->iv_bss);
+	ni->ni_txrate =
 	    iwi_cvtrate(CSR_READ_4(sc, IWI_CSR_CURRENT_TX_RATE));
+	ieee80211_free_node(ni);
 	ieee80211_media_status(ifp, imr);
 }
 
@@ -1367,13 +1370,14 @@ iwi_checkforqos(struct ieee80211vap *vap
 		frm += frm[1] + 2;
 	}
 
-	ni = vap->iv_bss;
+	ni = ieee80211_ref_node(vap->iv_bss);
 	ni->ni_capinfo = capinfo;
 	ni->ni_associd = associd & 0x3fff;
 	if (wme != NULL)
 		ni->ni_flags |= IEEE80211_NODE_QOS;
 	else
 		ni->ni_flags &= ~IEEE80211_NODE_QOS;
+	ieee80211_free_node(ni);
 #undef SUBTYPE
 }
 
@@ -2812,7 +2816,7 @@ iwi_auth_and_assoc(struct iwi_softc *sc,
 {
 	struct ieee80211com *ic = vap->iv_ic;
 	struct ifnet *ifp = vap->iv_ifp;
-	struct ieee80211_node *ni = vap->iv_bss;
+	struct ieee80211_node *ni;
 	struct iwi_configuration config;
 	struct iwi_associate *assoc = &sc->assoc;
 	struct iwi_rateset rs;
@@ -2822,6 +2826,8 @@ iwi_auth_and_assoc(struct iwi_softc *sc,
 
 	IWI_LOCK_ASSERT(sc);
 
+	ni = ieee80211_ref_node(vap->iv_bss);
+
 	if (sc->flags & IWI_FLAG_ASSOCIATED) {
 		DPRINTF(("Already associated\n"));
 		return (-1);
@@ -2980,6 +2986,7 @@ iwi_auth_and_assoc(struct iwi_softc *sc,
 	    le16toh(assoc->intval)));
 	error = iwi_cmd(sc, IWI_CMD_ASSOCIATE, assoc, sizeof *assoc);
 done:
+	ieee80211_free_node(ni);
 	if (error)
 		IWI_STATE_END(sc, IWI_FW_ASSOCIATING);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311260130.rAQ1UADW031879>