aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/rx.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r--net/mac80211/rx.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index a5619d1f9a3b..c985c7a537db 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1179,8 +1179,6 @@ static void ieee80211_rx_michael_mic_report(struct net_device *dev,
1179 else 1179 else
1180 keyidx = -1; 1180 keyidx = -1;
1181 1181
1182 /* TODO: verify that this is not triggered by fragmented
1183 * frames (hw does not verify MIC for them). */
1184 if (net_ratelimit()) 1182 if (net_ratelimit())
1185 printk(KERN_DEBUG "%s: TKIP hwaccel reported Michael MIC " 1183 printk(KERN_DEBUG "%s: TKIP hwaccel reported Michael MIC "
1186 "failure from " MAC_FMT " to " MAC_FMT " keyidx=%d\n", 1184 "failure from " MAC_FMT " to " MAC_FMT " keyidx=%d\n",
@@ -1188,9 +1186,10 @@ static void ieee80211_rx_michael_mic_report(struct net_device *dev,
1188 keyidx); 1186 keyidx);
1189 1187
1190 if (!sta) { 1188 if (!sta) {
1191 /* Some hardware versions seem to generate incorrect 1189 /*
1192 * Michael MIC reports; ignore them to avoid triggering 1190 * Some hardware seem to generate incorrect Michael MIC
1193 * countermeasures. */ 1191 * reports; ignore them to avoid triggering countermeasures.
1192 */
1194 if (net_ratelimit()) 1193 if (net_ratelimit())
1195 printk(KERN_DEBUG "%s: ignored spurious Michael MIC " 1194 printk(KERN_DEBUG "%s: ignored spurious Michael MIC "
1196 "error for unknown address " MAC_FMT "\n", 1195 "error for unknown address " MAC_FMT "\n",
@@ -1201,16 +1200,18 @@ static void ieee80211_rx_michael_mic_report(struct net_device *dev,
1201 if (!(rx->fc & IEEE80211_FCTL_PROTECTED)) { 1200 if (!(rx->fc & IEEE80211_FCTL_PROTECTED)) {
1202 if (net_ratelimit()) 1201 if (net_ratelimit())
1203 printk(KERN_DEBUG "%s: ignored spurious Michael MIC " 1202 printk(KERN_DEBUG "%s: ignored spurious Michael MIC "
1204 "error for a frame with no ISWEP flag (src " 1203 "error for a frame with no PROTECTED flag (src "
1205 MAC_FMT ")\n", dev->name, MAC_ARG(hdr->addr2)); 1204 MAC_FMT ")\n", dev->name, MAC_ARG(hdr->addr2));
1206 goto ignore; 1205 goto ignore;
1207 } 1206 }
1208 1207
1209 if (rx->sdata->type == IEEE80211_IF_TYPE_AP && keyidx) { 1208 if (rx->sdata->type == IEEE80211_IF_TYPE_AP && keyidx) {
1210 /* AP with Pairwise keys support should never receive Michael 1209 /*
1211 * MIC errors for non-zero keyidx because these are reserved 1210 * APs with pairwise keys should never receive Michael MIC
1212 * for group keys and only the AP is sending real multicast 1211 * errors for non-zero keyidx because these are reserved for
1213 * frames in BSS. */ 1212 * group keys and only the AP is sending real multicast
1213 * frames in the BSS.
1214 */
1214 if (net_ratelimit()) 1215 if (net_ratelimit())
1215 printk(KERN_DEBUG "%s: ignored Michael MIC error for " 1216 printk(KERN_DEBUG "%s: ignored Michael MIC error for "
1216 "a frame with non-zero keyidx (%d)" 1217 "a frame with non-zero keyidx (%d)"
@@ -1230,10 +1231,6 @@ static void ieee80211_rx_michael_mic_report(struct net_device *dev,
1230 goto ignore; 1231 goto ignore;
1231 } 1232 }
1232 1233
1233 /* TODO: consider verifying the MIC error report with software
1234 * implementation if we get too many spurious reports from the
1235 * hardware. */
1236
1237 mac80211_ev_michael_mic_failure(rx->dev, keyidx, hdr); 1234 mac80211_ev_michael_mic_failure(rx->dev, keyidx, hdr);
1238 ignore: 1235 ignore:
1239 dev_kfree_skb(rx->skb); 1236 dev_kfree_skb(rx->skb);