diff options
Diffstat (limited to 'net/mac80211/util.c')
-rw-r--r-- | net/mac80211/util.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index e6c08da8da26..d09f78bb2442 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -666,8 +666,8 @@ u32 ieee802_11_parse_elems_crc(u8 *start, size_t len, | |||
666 | elems->mesh_id_len = elen; | 666 | elems->mesh_id_len = elen; |
667 | break; | 667 | break; |
668 | case WLAN_EID_MESH_CONFIG: | 668 | case WLAN_EID_MESH_CONFIG: |
669 | elems->mesh_config = pos; | 669 | if (elen >= sizeof(struct ieee80211_meshconf_ie)) |
670 | elems->mesh_config_len = elen; | 670 | elems->mesh_config = (void *)pos; |
671 | break; | 671 | break; |
672 | case WLAN_EID_PEER_LINK: | 672 | case WLAN_EID_PEER_LINK: |
673 | elems->peer_link = pos; | 673 | elems->peer_link = pos; |
@@ -685,6 +685,10 @@ u32 ieee802_11_parse_elems_crc(u8 *start, size_t len, | |||
685 | elems->perr = pos; | 685 | elems->perr = pos; |
686 | elems->perr_len = elen; | 686 | elems->perr_len = elen; |
687 | break; | 687 | break; |
688 | case WLAN_EID_RANN: | ||
689 | if (elen >= sizeof(struct ieee80211_rann_ie)) | ||
690 | elems->rann = (void *)pos; | ||
691 | break; | ||
688 | case WLAN_EID_CHANNEL_SWITCH: | 692 | case WLAN_EID_CHANNEL_SWITCH: |
689 | elems->ch_switch_elem = pos; | 693 | elems->ch_switch_elem = pos; |
690 | elems->ch_switch_elem_len = elen; | 694 | elems->ch_switch_elem_len = elen; |
@@ -868,17 +872,19 @@ void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, | |||
868 | WARN_ON(err); | 872 | WARN_ON(err); |
869 | } | 873 | } |
870 | 874 | ||
871 | ieee80211_tx_skb(sdata, skb, 0); | 875 | IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; |
876 | ieee80211_tx_skb(sdata, skb); | ||
872 | } | 877 | } |
873 | 878 | ||
874 | int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, | 879 | int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, |
875 | const u8 *ie, size_t ie_len) | 880 | const u8 *ie, size_t ie_len, |
881 | enum ieee80211_band band) | ||
876 | { | 882 | { |
877 | struct ieee80211_supported_band *sband; | 883 | struct ieee80211_supported_band *sband; |
878 | u8 *pos, *supp_rates_len, *esupp_rates_len = NULL; | 884 | u8 *pos, *supp_rates_len, *esupp_rates_len = NULL; |
879 | int i; | 885 | int i; |
880 | 886 | ||
881 | sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; | 887 | sband = local->hw.wiphy->bands[band]; |
882 | 888 | ||
883 | pos = buffer; | 889 | pos = buffer; |
884 | 890 | ||
@@ -966,9 +972,11 @@ void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, | |||
966 | memcpy(pos, ssid, ssid_len); | 972 | memcpy(pos, ssid, ssid_len); |
967 | pos += ssid_len; | 973 | pos += ssid_len; |
968 | 974 | ||
969 | skb_put(skb, ieee80211_build_preq_ies(local, pos, ie, ie_len)); | 975 | skb_put(skb, ieee80211_build_preq_ies(local, pos, ie, ie_len, |
976 | local->hw.conf.channel->band)); | ||
970 | 977 | ||
971 | ieee80211_tx_skb(sdata, skb, 0); | 978 | IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; |
979 | ieee80211_tx_skb(sdata, skb); | ||
972 | } | 980 | } |
973 | 981 | ||
974 | u32 ieee80211_sta_get_rates(struct ieee80211_local *local, | 982 | u32 ieee80211_sta_get_rates(struct ieee80211_local *local, |