Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211
authorJohn W. Linville <linville@tuxdriver.com>
Mon, 29 Oct 2012 18:14:48 +0000 (14:14 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 29 Oct 2012 18:14:48 +0000 (14:14 -0400)
1  2 
net/mac80211/util.c

diff --combined net/mac80211/util.c
index 94e58687397908ae2ef2f71f5d6b68d78c80aea3,e6e4bda0528e02741f8ee17e4086703c53a85665..239391807ca9cff116576d07975c2ce31db393d3
@@@ -406,7 -406,7 +406,7 @@@ void ieee80211_add_pending_skb(struct i
        int queue = info->hw_queue;
  
        if (WARN_ON(!info->control.vif)) {
 -              kfree_skb(skb);
 +              ieee80211_free_txskb(&local->hw, skb);
                return;
        }
  
@@@ -431,7 -431,7 +431,7 @@@ void ieee80211_add_pending_skbs_fn(stru
                struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
  
                if (WARN_ON(!info->control.vif)) {
 -                      kfree_skb(skb);
 +                      ieee80211_free_txskb(&local->hw, skb);
                        continue;
                }
  
@@@ -643,13 -643,41 +643,41 @@@ u32 ieee802_11_parse_elems_crc(u8 *star
                        break;
                }
  
-               if (id != WLAN_EID_VENDOR_SPECIFIC &&
-                   id != WLAN_EID_QUIET &&
-                   test_bit(id, seen_elems)) {
-                       elems->parse_error = true;
-                       left -= elen;
-                       pos += elen;
-                       continue;
+               switch (id) {
+               case WLAN_EID_SSID:
+               case WLAN_EID_SUPP_RATES:
+               case WLAN_EID_FH_PARAMS:
+               case WLAN_EID_DS_PARAMS:
+               case WLAN_EID_CF_PARAMS:
+               case WLAN_EID_TIM:
+               case WLAN_EID_IBSS_PARAMS:
+               case WLAN_EID_CHALLENGE:
+               case WLAN_EID_RSN:
+               case WLAN_EID_ERP_INFO:
+               case WLAN_EID_EXT_SUPP_RATES:
+               case WLAN_EID_HT_CAPABILITY:
+               case WLAN_EID_HT_OPERATION:
+               case WLAN_EID_VHT_CAPABILITY:
+               case WLAN_EID_VHT_OPERATION:
+               case WLAN_EID_MESH_ID:
+               case WLAN_EID_MESH_CONFIG:
+               case WLAN_EID_PEER_MGMT:
+               case WLAN_EID_PREQ:
+               case WLAN_EID_PREP:
+               case WLAN_EID_PERR:
+               case WLAN_EID_RANN:
+               case WLAN_EID_CHANNEL_SWITCH:
+               case WLAN_EID_EXT_CHANSWITCH_ANN:
+               case WLAN_EID_COUNTRY:
+               case WLAN_EID_PWR_CONSTRAINT:
+               case WLAN_EID_TIMEOUT_INTERVAL:
+                       if (test_bit(id, seen_elems)) {
+                               elems->parse_error = true;
+                               left -= elen;
+                               pos += elen;
+                               continue;
+                       }
+                       break;
                }
  
                if (calc_crc && id < 64 && (filter & (1ULL << id)))