diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/ieee80211/ieee80211_rx.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/net/ieee80211/ieee80211_rx.c b/net/ieee80211/ieee80211_rx.c index 8d87d66c2a34..6b005cb0caa0 100644 --- a/net/ieee80211/ieee80211_rx.c +++ b/net/ieee80211/ieee80211_rx.c | |||
@@ -917,8 +917,9 @@ static int ieee80211_parse_qos_info_param_IE(struct ieee80211_info_element | |||
917 | return rc; | 917 | return rc; |
918 | } | 918 | } |
919 | 919 | ||
920 | static int ieee80211_parse_info_param(struct ieee80211_info_element *info_element, | 920 | static int ieee80211_parse_info_param(struct ieee80211_info_element |
921 | u16 length, struct ieee80211_network *network) | 921 | *info_element, u16 length, |
922 | struct ieee80211_network *network) | ||
922 | { | 923 | { |
923 | u8 i; | 924 | u8 i; |
924 | #ifdef CONFIG_IEEE80211_DEBUG | 925 | #ifdef CONFIG_IEEE80211_DEBUG |
@@ -929,11 +930,11 @@ static int ieee80211_parse_info_param(struct ieee80211_info_element *info_elemen | |||
929 | while (length >= sizeof(*info_element)) { | 930 | while (length >= sizeof(*info_element)) { |
930 | if (sizeof(*info_element) + info_element->len > length) { | 931 | if (sizeof(*info_element) + info_element->len > length) { |
931 | IEEE80211_DEBUG_MGMT("Info elem: parse failed: " | 932 | IEEE80211_DEBUG_MGMT("Info elem: parse failed: " |
932 | "info_element->len + 2 > left : " | 933 | "info_element->len + 2 > left : " |
933 | "info_element->len+2=%zd left=%d, id=%d.\n", | 934 | "info_element->len+2=%zd left=%d, id=%d.\n", |
934 | info_element->len + | 935 | info_element->len + |
935 | sizeof(*info_element), | 936 | sizeof(*info_element), |
936 | length, info_element->id); | 937 | length, info_element->id); |
937 | return 1; | 938 | return 1; |
938 | } | 939 | } |
939 | 940 | ||
@@ -954,7 +955,7 @@ static int ieee80211_parse_info_param(struct ieee80211_info_element *info_elemen | |||
954 | IW_ESSID_MAX_SIZE - network->ssid_len); | 955 | IW_ESSID_MAX_SIZE - network->ssid_len); |
955 | 956 | ||
956 | IEEE80211_DEBUG_MGMT("MFIE_TYPE_SSID: '%s' len=%d.\n", | 957 | IEEE80211_DEBUG_MGMT("MFIE_TYPE_SSID: '%s' len=%d.\n", |
957 | network->ssid, network->ssid_len); | 958 | network->ssid, network->ssid_len); |
958 | break; | 959 | break; |
959 | 960 | ||
960 | case MFIE_TYPE_RATES: | 961 | case MFIE_TYPE_RATES: |
@@ -1074,17 +1075,20 @@ static int ieee80211_parse_info_param(struct ieee80211_info_element *info_elemen | |||
1074 | break; | 1075 | break; |
1075 | 1076 | ||
1076 | case MFIE_TYPE_QOS_PARAMETER: | 1077 | case MFIE_TYPE_QOS_PARAMETER: |
1077 | printk(KERN_ERR "QoS Error need to parse QOS_PARAMETER IE\n"); | 1078 | printk(KERN_ERR |
1079 | "QoS Error need to parse QOS_PARAMETER IE\n"); | ||
1078 | break; | 1080 | break; |
1079 | 1081 | ||
1080 | default: | 1082 | default: |
1081 | IEEE80211_DEBUG_MGMT("unsupported IE %d\n", | 1083 | IEEE80211_DEBUG_MGMT("unsupported IE %d\n", |
1082 | info_element->id); | 1084 | info_element->id); |
1083 | break; | 1085 | break; |
1084 | } | 1086 | } |
1085 | 1087 | ||
1086 | length -= sizeof(*info_element) + info_element->len; | 1088 | length -= sizeof(*info_element) + info_element->len; |
1087 | info_element = (struct ieee80211_info_element *) &info_element->data[info_element->len]; | 1089 | info_element = |
1090 | (struct ieee80211_info_element *)&info_element-> | ||
1091 | data[info_element->len]; | ||
1088 | } | 1092 | } |
1089 | 1093 | ||
1090 | return 0; | 1094 | return 0; |
@@ -1112,7 +1116,8 @@ static int ieee80211_handle_assoc_resp(struct ieee80211_device *ieee, struct iee | |||
1112 | network->rates_len = network->rates_ex_len = 0; | 1116 | network->rates_len = network->rates_ex_len = 0; |
1113 | network->last_associate = 0; | 1117 | network->last_associate = 0; |
1114 | network->ssid_len = 0; | 1118 | network->ssid_len = 0; |
1115 | network->erp_value = (network->capability & WLAN_CAPABILITY_IBSS) ? 0x3 : 0x0; | 1119 | network->erp_value = |
1120 | (network->capability & WLAN_CAPABILITY_IBSS) ? 0x3 : 0x0; | ||
1116 | 1121 | ||
1117 | if (stats->freq == IEEE80211_52GHZ_BAND) { | 1122 | if (stats->freq == IEEE80211_52GHZ_BAND) { |
1118 | /* for A band (No DS info) */ | 1123 | /* for A band (No DS info) */ |
@@ -1123,7 +1128,8 @@ static int ieee80211_handle_assoc_resp(struct ieee80211_device *ieee, struct iee | |||
1123 | network->wpa_ie_len = 0; | 1128 | network->wpa_ie_len = 0; |
1124 | network->rsn_ie_len = 0; | 1129 | network->rsn_ie_len = 0; |
1125 | 1130 | ||
1126 | if(ieee80211_parse_info_param(frame->info_element, stats->len - sizeof(*frame), network)) | 1131 | if (ieee80211_parse_info_param |
1132 | (frame->info_element, stats->len - sizeof(*frame), network)) | ||
1127 | return 1; | 1133 | return 1; |
1128 | 1134 | ||
1129 | network->mode = 0; | 1135 | network->mode = 0; |
@@ -1185,7 +1191,8 @@ static inline int ieee80211_network_init(struct ieee80211_device *ieee, struct i | |||
1185 | network->wpa_ie_len = 0; | 1191 | network->wpa_ie_len = 0; |
1186 | network->rsn_ie_len = 0; | 1192 | network->rsn_ie_len = 0; |
1187 | 1193 | ||
1188 | if(ieee80211_parse_info_param(beacon->info_element, stats->len - sizeof(*beacon), network)) | 1194 | if (ieee80211_parse_info_param |
1195 | (beacon->info_element, stats->len - sizeof(*beacon), network)) | ||
1189 | return 1; | 1196 | return 1; |
1190 | 1197 | ||
1191 | network->mode = 0; | 1198 | network->mode = 0; |