]> xenbits.xensource.com Git - people/liuw/freebsd.git/commitdiff
iwn(4): various simple fixes
authoravos <avos@FreeBSD.org>
Thu, 5 Nov 2015 22:44:36 +0000 (22:44 +0000)
committeravos <avos@FreeBSD.org>
Thu, 5 Nov 2015 22:44:36 +0000 (22:44 +0000)
- Fix mbuf leaks in iwn_raw_xmit() and iwn_xmit_task()
(regression since r288178).
- Check IWN_FLAG_RUNNING flag under lock.
- Remove m->m_pkthdr.rcvif initialization (fixed in r283994).
- Enclose some values in return statements into parentheses.

Approved by: adrian (mentor)
Differential Revision: https://reviews.freebsd.org/D4069

sys/dev/iwn/if_iwn.c

index 907755ba1b6f0161cd81d161b183199167ad0086..2947db549c7a2cb5f1742245ece4dd5040ad1ad8 100644 (file)
@@ -4852,6 +4852,7 @@ iwn_xmit_task(void *arg0, int pending)
                        if_inc_counter(ni->ni_vap->iv_ifp,
                            IFCOUNTER_OERRORS, 1);
                        ieee80211_free_node(ni);
+                       m_freem(m);
                }
        }
 
@@ -4872,16 +4873,13 @@ iwn_raw_xmit(struct ieee80211_node *ni, struct mbuf *m,
 
        DPRINTF(sc, IWN_DEBUG_XMIT | IWN_DEBUG_TRACE, "->%s begin\n", __func__);
 
+       IWN_LOCK(sc);
        if ((sc->sc_flags & IWN_FLAG_RUNNING) == 0) {
                m_freem(m);
-               return ENETDOWN;
+               IWN_UNLOCK(sc);
+               return (ENETDOWN);
        }
 
-       /* XXX? net80211 doesn't set this on xmit'ed raw frames? */
-       m->m_pkthdr.rcvif = (void *) ni;
-
-       IWN_LOCK(sc);
-
        /* queue frame if we have to */
        if (sc->sc_beacon_wait) {
                if (iwn_xmit_queue_enqueue(sc, m) != 0) {
@@ -4909,12 +4907,14 @@ iwn_raw_xmit(struct ieee80211_node *ni, struct mbuf *m,
        }
        if (error == 0)
                sc->sc_tx_timer = 5;
+       else
+               m_freem(m);
 
        IWN_UNLOCK(sc);
 
        DPRINTF(sc, IWN_DEBUG_TRACE | IWN_DEBUG_XMIT, "->%s: end\n",__func__);
 
-       return error;
+       return (error);
 }
 
 /*