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);
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to