Changeset 36828


Ignore:
Timestamp:
2013-06-03T22:58:28+02:00 (5 years ago)
Author:
nbd
Message:

ath9k: fix a null pointer deref issue in the powersave fixes

Signed-off-by: Felix Fietkau <nbd@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/mac80211/patches/300-pending_work.patch

    r36825 r36828  
    42634263        half_gi = (flags & IEEE80211_TX_RC_SHORT_GI) ? 1 : 0; 
    42644264  
    4265 @@ -803,24 +790,16 @@ static int ath_compute_num_delims(struct 
     4265@@ -803,25 +790,20 @@ static int ath_compute_num_delims(struct 
    42664266        return ndelim; 
    42674267 } 
     
    42914291+       while (1) { 
    42924292                skb = skb_peek(&tid->buf_q); 
     4293+               if (!skb) 
     4294+                       break; 
     4295+ 
    42934296                fi = get_frame_info(skb); 
    42944297                bf = fi->bf; 
    4295 @@ -837,10 +816,8 @@ static enum ATH_AGGR_STATUS ath_tx_form_ 
     4298                if (!fi->bf) 
     4299@@ -837,10 +819,8 @@ static enum ATH_AGGR_STATUS ath_tx_form_ 
    42964300                seqno = bf->bf_state.seqno; 
    42974301  
     
    43054309                if (tid->bar_index > ATH_BA_INDEX(tid->seq_start, seqno)) { 
    43064310                        struct ath_tx_status ts = {}; 
    4307 @@ -854,10 +831,45 @@ static enum ATH_AGGR_STATUS ath_tx_form_ 
     4311@@ -854,10 +834,45 @@ static enum ATH_AGGR_STATUS ath_tx_form_ 
    43084312                        continue; 
    43094313                } 
     
    43514355                        rl = 1; 
    43524356                } 
    4353 @@ -898,7 +910,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_ 
     4357@@ -898,7 +913,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_ 
    43544358  
    43554359                /* link buffers of this frame to the aggregate */ 
     
    43604364  
    43614365                __skb_unlink(skb, &tid->buf_q); 
    4362 @@ -998,14 +1010,14 @@ static void ath_buf_set_rate(struct ath_ 
     4366@@ -998,14 +1013,14 @@ static void ath_buf_set_rate(struct ath_ 
    43634367  
    43644368        skb = bf->bf_mpdu; 
     
    43774381                int phy; 
    43784382  
    4379 @@ -1107,9 +1119,8 @@ static void ath_tx_fill_desc(struct ath_ 
     4383@@ -1107,9 +1122,8 @@ static void ath_tx_fill_desc(struct ath_ 
    43804384 { 
    43814385        struct ath_hw *ah = sc->sc_ah; 
     
    43884392        memset(&info, 0, sizeof(info)); 
    43894393        info.is_first = true; 
    4390 @@ -1117,24 +1128,17 @@ static void ath_tx_fill_desc(struct ath_ 
     4394@@ -1117,24 +1131,17 @@ static void ath_tx_fill_desc(struct ath_ 
    43914395        info.txpower = MAX_RATE_POWER; 
    43924396        info.qcu = txq->axq_qnum; 
     
    44164420                info.type = get_hw_packet_type(skb); 
    44174421                if (bf->bf_next) 
    4418 @@ -1142,6 +1146,21 @@ static void ath_tx_fill_desc(struct ath_ 
     4422@@ -1142,6 +1149,21 @@ static void ath_tx_fill_desc(struct ath_ 
    44194423                else 
    44204424                        info.link = 0; 
     
    44384442                info.buf_len[0] = skb->len; 
    44394443                info.pkt_len = fi->framelen; 
    4440 @@ -1151,7 +1170,7 @@ static void ath_tx_fill_desc(struct ath_ 
     4444@@ -1151,7 +1173,7 @@ static void ath_tx_fill_desc(struct ath_ 
    44414445                if (aggr) { 
    44424446                        if (bf == bf_first) 
     
    44474451                        else 
    44484452                                info.aggr = AGGR_BUF_MIDDLE; 
    4449 @@ -1160,6 +1179,9 @@ static void ath_tx_fill_desc(struct ath_ 
     4453@@ -1160,6 +1182,9 @@ static void ath_tx_fill_desc(struct ath_ 
    44504454                        info.aggr_len = len; 
    44514455                } 
     
    44574461                bf = bf->bf_next; 
    44584462        } 
    4459 @@ -1224,9 +1246,6 @@ int ath_tx_aggr_start(struct ath_softc * 
     4463@@ -1224,9 +1249,6 @@ int ath_tx_aggr_start(struct ath_softc * 
    44604464        an = (struct ath_node *)sta->drv_priv; 
    44614465        txtid = ATH_AN_2_TID(an, tid); 
     
    44674471         * in HT IBSS when a beacon with HT-info is received after the station 
    44684472         * has already been added. 
    4469 @@ -1238,7 +1257,7 @@ int ath_tx_aggr_start(struct ath_softc * 
     4473@@ -1238,7 +1260,7 @@ int ath_tx_aggr_start(struct ath_softc * 
    44704474                an->mpdudensity = density; 
    44714475        } 
     
    44764480        *ssn = txtid->seq_start = txtid->seq_next; 
    44774481        txtid->bar_index = -1; 
    4478 @@ -1255,28 +1274,9 @@ void ath_tx_aggr_stop(struct ath_softc * 
     4482@@ -1255,28 +1277,9 @@ void ath_tx_aggr_stop(struct ath_softc * 
    44794483        struct ath_atx_tid *txtid = ATH_AN_2_TID(an, tid); 
    44804484        struct ath_txq *txq = txtid->ac->txq; 
     
    45064510        ath_txq_unlock_complete(sc, txq); 
    45074511 } 
    4508 @@ -1342,18 +1342,92 @@ void ath_tx_aggr_wakeup(struct ath_softc 
     4512@@ -1342,18 +1345,92 @@ void ath_tx_aggr_wakeup(struct ath_softc 
    45094513        } 
    45104514 } 
     
    46064610  
    46074611 /********************/ 
    4608 @@ -1709,8 +1783,9 @@ static void ath_tx_txqaddbuf(struct ath_ 
     4612@@ -1709,8 +1786,9 @@ static void ath_tx_txqaddbuf(struct ath_ 
    46094613        } 
    46104614 } 
     
    46184622        struct ath_frame_info *fi = get_frame_info(skb); 
    46194623        struct list_head bf_head; 
    4620 @@ -1723,26 +1798,28 @@ static void ath_tx_send_ampdu(struct ath 
     4624@@ -1723,26 +1801,28 @@ static void ath_tx_send_ampdu(struct ath 
    46214625         * - seqno is not within block-ack window 
    46224626         * - h/w queue depth exceeds low water mark 
     
    46534657        INIT_LIST_HEAD(&bf_head); 
    46544658        list_add(&bf->list, &bf_head); 
    4655 @@ -1751,10 +1828,10 @@ static void ath_tx_send_ampdu(struct ath 
     4659@@ -1751,10 +1831,10 @@ static void ath_tx_send_ampdu(struct ath 
    46564660        ath_tx_addto_baw(sc, tid, bf->bf_state.seqno); 
    46574661  
     
    46674671  
    46684672 static void ath_tx_send_normal(struct ath_softc *sc, struct ath_txq *txq, 
    4669 @@ -1892,49 +1969,6 @@ static struct ath_buf *ath_tx_setup_buff 
     4673@@ -1892,49 +1972,6 @@ static struct ath_buf *ath_tx_setup_buff 
    46704674        return bf; 
    46714675 } 
     
    47174721 int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, 
    47184722                 struct ath_tx_control *txctl) 
    4719 @@ -1945,8 +1979,11 @@ int ath_tx_start(struct ieee80211_hw *hw 
     4723@@ -1945,8 +1982,11 @@ int ath_tx_start(struct ieee80211_hw *hw 
    47204724        struct ieee80211_vif *vif = info->control.vif; 
    47214725        struct ath_softc *sc = hw->priv; 
     
    47294733  
    47304734        /* NOTE:  sta can be NULL according to net/mac80211.h */ 
    4731 @@ -2002,8 +2039,47 @@ int ath_tx_start(struct ieee80211_hw *hw 
     4735@@ -2002,8 +2042,47 @@ int ath_tx_start(struct ieee80211_hw *hw 
    47324736                txq->stopped = true; 
    47334737        } 
     
    47784782  
    47794783        return 0; 
    4780 @@ -2054,7 +2130,12 @@ static void ath_tx_complete(struct ath_s 
     4784@@ -2054,7 +2133,12 @@ static void ath_tx_complete(struct ath_s 
    47814785        } 
    47824786        spin_unlock_irqrestore(&sc->sc_pm_lock, flags); 
     
    47914795                if (WARN_ON(--txq->pending_frames < 0)) 
    47924796                        txq->pending_frames = 0; 
    4793 @@ -2065,8 +2146,6 @@ static void ath_tx_complete(struct ath_s 
     4797@@ -2065,8 +2149,6 @@ static void ath_tx_complete(struct ath_s 
    47944798                        txq->stopped = false; 
    47954799                } 
     
    48004804  
    48014805 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf, 
    4802 @@ -2408,12 +2487,10 @@ void ath_tx_node_init(struct ath_softc * 
     4806@@ -2408,12 +2490,10 @@ void ath_tx_node_init(struct ath_softc * 
    48034807                tid->baw_head  = tid->baw_tail = 0; 
    48044808                tid->sched     = false; 
     
    48144818  
    48154819        for (acno = 0, ac = &an->ac[acno]; 
    4816 @@ -2450,9 +2527,9 @@ void ath_tx_node_cleanup(struct ath_soft 
     4820@@ -2450,9 +2530,9 @@ void ath_tx_node_cleanup(struct ath_soft 
    48174821                } 
    48184822  
Note: See TracChangeset for help on using the changeset viewer.