source: trunk/package/mac80211/patches/580-mac80211_fix_minstrel_ht_crash.patch @ 26287

Last change on this file since 26287 was 26287, checked in by nbd, 6 years ago

mac80211: fix a deadlock in minstrel_ht when a HT client without valid MCS rates connects

File size: 1.3 KB
  • net/mac80211/rc80211_minstrel_ht.c

    a b minstrel_ht_update_caps(void *priv, stru 
    659659        struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs; 
    660660        struct ieee80211_local *local = hw_to_local(mp->hw); 
    661661        u16 sta_cap = sta->ht_cap.cap; 
     662        int n_supported = 0; 
    662663        int ack_dur; 
    663664        int stbc; 
    664665        int i; 
    665666 
    666667        /* fall back to the old minstrel for legacy stations */ 
    667         if (!sta->ht_cap.ht_supported) { 
    668                 msp->is_ht = false; 
    669                 memset(&msp->legacy, 0, sizeof(msp->legacy)); 
    670                 msp->legacy.r = msp->ratelist; 
    671                 msp->legacy.sample_table = msp->sample_table; 
    672                 return mac80211_minstrel.rate_init(priv, sband, sta, &msp->legacy); 
    673         } 
     668        if (!sta->ht_cap.ht_supported) 
     669                goto use_legacy; 
    674670 
    675671        BUILD_BUG_ON(ARRAY_SIZE(minstrel_mcs_groups) != 
    676672                MINSTREL_MAX_STREAMS * MINSTREL_STREAM_GROUPS); 
    minstrel_ht_update_caps(void *priv, stru 
    725721 
    726722                mi->groups[i].supported = 
    727723                        mcs->rx_mask[minstrel_mcs_groups[i].streams - 1]; 
     724 
     725                if (mi->groups[i].supported) 
     726                        n_supported++; 
    728727        } 
     728 
     729        if (!n_supported) 
     730                goto use_legacy; 
     731 
     732        return; 
     733 
     734use_legacy: 
     735        msp->is_ht = false; 
     736        memset(&msp->legacy, 0, sizeof(msp->legacy)); 
     737        msp->legacy.r = msp->ratelist; 
     738        msp->legacy.sample_table = msp->sample_table; 
     739        return mac80211_minstrel.rate_init(priv, sband, sta, &msp->legacy); 
    729740} 
    730741 
    731742static void 
Note: See TracBrowser for help on using the repository browser.