From: Johannes Berg <johannes@sipsolutions.net>
To: John Linville <linville@tuxdriver.com>
Cc: Jiri Benc <jbenc@suse.cz>, Michael Wu <flamingice@sourmilk.net>,
linux-wireless@vger.kernel.org
Subject: [PATCH 14/27] mac80211: ratelimit some RX messages
Date: Tue, 21 Aug 2007 16:59:19 +0200 [thread overview]
Message-ID: <20070821150045.531854000@sipsolutions.net> (raw)
In-Reply-To: 20070821145905.689978000@sipsolutions.net
Many if not all of these messages can be triggered by sending
a few rogue frames which is trivially done and then we overflow
our logs.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
net/mac80211/rx.c | 134 ++++++++++++++++++++++++++++++++----------------------
1 file changed, 81 insertions(+), 53 deletions(-)
--- wireless-dev.orig/net/mac80211/rx.c 2007-08-21 14:42:05.415923881 +0200
+++ wireless-dev/net/mac80211/rx.c 2007-08-21 14:49:06.855923881 +0200
@@ -343,13 +343,16 @@ ieee80211_rx_h_load_key(struct ieee80211
if (!rx->key) {
if (!rx->u.rx.ra_match)
return TXRX_DROP;
- printk(KERN_DEBUG "%s: RX WEP frame with "
- "unknown keyidx %d (A1=" MAC_FMT " A2="
- MAC_FMT " A3=" MAC_FMT ")\n",
- rx->dev->name, keyidx,
- MAC_ARG(hdr->addr1),
- MAC_ARG(hdr->addr2),
- MAC_ARG(hdr->addr3));
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: RX WEP frame "
+ "with unknown keyidx %d "
+ "(A1=" MAC_FMT
+ " A2=" MAC_FMT
+ " A3=" MAC_FMT ")\n",
+ rx->dev->name, keyidx,
+ MAC_ARG(hdr->addr1),
+ MAC_ARG(hdr->addr2),
+ MAC_ARG(hdr->addr3));
if (!rx->local->apdev)
return TXRX_DROP;
ieee80211_rx_mgmt(
@@ -530,16 +533,18 @@ ieee80211_rx_h_wep_decrypt(struct ieee80
return TXRX_CONTINUE;
if (!rx->key) {
- printk(KERN_DEBUG "%s: RX WEP frame, but no key set\n",
- rx->dev->name);
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: RX WEP frame, but no key set\n",
+ rx->dev->name);
return TXRX_DROP;
}
if (!(rx->u.rx.status->flag & RX_FLAG_DECRYPTED) ||
rx->key->force_sw_encrypt) {
if (ieee80211_wep_decrypt(rx->local, rx->skb, rx->key)) {
- printk(KERN_DEBUG "%s: RX WEP frame, decrypt "
- "failed\n", rx->dev->name);
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: RX WEP frame, decrypt "
+ "failed\n", rx->dev->name);
return TXRX_DROP;
}
} else if (rx->local->hw.flags & IEEE80211_HW_WEP_INCLUDE_IV) {
@@ -696,12 +701,15 @@ ieee80211_rx_h_defragment(struct ieee802
}
rpn = rx->key->u.ccmp.rx_pn[rx->u.rx.queue];
if (memcmp(pn, rpn, CCMP_PN_LEN) != 0) {
- printk(KERN_DEBUG "%s: defrag: CCMP PN not sequential"
- " A2=" MAC_FMT " PN=%02x%02x%02x%02x%02x%02x "
- "(expected %02x%02x%02x%02x%02x%02x)\n",
- rx->dev->name, MAC_ARG(hdr->addr2),
- rpn[0], rpn[1], rpn[2], rpn[3], rpn[4], rpn[5],
- pn[0], pn[1], pn[2], pn[3], pn[4], pn[5]);
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: defrag: CCMP PN not "
+ "sequential A2=" MAC_FMT
+ " PN=%02x%02x%02x%02x%02x%02x "
+ "(expected %02x%02x%02x%02x%02x%02x)\n",
+ rx->dev->name, MAC_ARG(hdr->addr2),
+ rpn[0], rpn[1], rpn[2], rpn[3], rpn[4],
+ rpn[5], pn[0], pn[1], pn[2], pn[3],
+ pn[4], pn[5]);
return TXRX_DROP;
}
memcpy(entry->last_pn, pn, CCMP_PN_LEN);
@@ -879,8 +887,9 @@ ieee80211_rx_h_drop_unencrypted(struct i
(rx->key || rx->sdata->drop_unencrypted) &&
(rx->sdata->eapol == 0 ||
!ieee80211_is_eapol(rx->skb)))) {
- printk(KERN_DEBUG "%s: RX non-WEP frame, but expected "
- "encryption\n", rx->dev->name);
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: RX non-WEP frame, but expected "
+ "encryption\n", rx->dev->name);
return TXRX_DROP;
}
return TXRX_CONTINUE;
@@ -971,17 +980,19 @@ ieee80211_rx_h_data_agg(struct ieee80211
* in local net stack and back to the wireless
* media */
skb2 = skb_copy(frame, GFP_ATOMIC);
- if (!skb2)
+ if (!skb2 && net_ratelimit())
printk(KERN_DEBUG "%s: failed to clone"
" multicast frame\n", dev->name);
} else {
struct sta_info *dsta;
dsta = sta_info_get(local, frame->data);
- if (dsta && !dsta->dev)
- printk(KERN_DEBUG "Station with null "
- "dev structure!\n");
- else if (dsta && dsta->dev == dev) {
+ if (dsta && !dsta->dev) {
+ if (net_ratelimit())
+ printk(KERN_DEBUG "Station "
+ "with null dev "
+ "structure!\n");
+ } else if (dsta && dsta->dev == dev) {
/* Destination station is associated
* to this AP, so send the frame
* directly to it and do not pass
@@ -1061,10 +1072,15 @@ ieee80211_rx_h_data(struct ieee80211_txr
if (unlikely(sdata->type != IEEE80211_IF_TYPE_AP &&
sdata->type != IEEE80211_IF_TYPE_VLAN)) {
- printk(KERN_DEBUG "%s: dropped ToDS frame (BSSID="
- MAC_FMT " SA=" MAC_FMT " DA=" MAC_FMT ")\n",
- dev->name, MAC_ARG(hdr->addr1),
- MAC_ARG(hdr->addr2), MAC_ARG(hdr->addr3));
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: dropped ToDS frame "
+ "(BSSID=" MAC_FMT
+ " SA=" MAC_FMT
+ " DA=" MAC_FMT ")\n",
+ dev->name,
+ MAC_ARG(hdr->addr1),
+ MAC_ARG(hdr->addr2),
+ MAC_ARG(hdr->addr3));
return TXRX_DROP;
}
break;
@@ -1074,12 +1090,16 @@ ieee80211_rx_h_data(struct ieee80211_txr
memcpy(src, hdr->addr4, ETH_ALEN);
if (unlikely(sdata->type != IEEE80211_IF_TYPE_WDS)) {
- printk(KERN_DEBUG "%s: dropped FromDS&ToDS frame (RA="
- MAC_FMT " TA=" MAC_FMT " DA=" MAC_FMT " SA="
- MAC_FMT ")\n",
- rx->dev->name, MAC_ARG(hdr->addr1),
- MAC_ARG(hdr->addr2), MAC_ARG(hdr->addr3),
- MAC_ARG(hdr->addr4));
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: dropped FromDS&ToDS "
+ "frame (RA=" MAC_FMT
+ " TA=" MAC_FMT " DA=" MAC_FMT
+ " SA=" MAC_FMT ")\n",
+ rx->dev->name,
+ MAC_ARG(hdr->addr1),
+ MAC_ARG(hdr->addr2),
+ MAC_ARG(hdr->addr3),
+ MAC_ARG(hdr->addr4));
return TXRX_DROP;
}
break;
@@ -1155,15 +1175,16 @@ ieee80211_rx_h_data(struct ieee80211_txr
/* send multicast frames both to higher layers in
* local net stack and back to the wireless media */
skb2 = skb_copy(skb, GFP_ATOMIC);
- if (!skb2)
+ if (!skb2 && net_ratelimit())
printk(KERN_DEBUG "%s: failed to clone "
"multicast frame\n", dev->name);
} else {
struct sta_info *dsta;
dsta = sta_info_get(local, skb->data);
if (dsta && !dsta->dev) {
- printk(KERN_DEBUG "Station with null dev "
- "structure!\n");
+ if (net_ratelimit())
+ printk(KERN_DEBUG "Station with null "
+ "dev structure!\n");
} else if (dsta && dsta->dev == dev) {
/* Destination station is associated to this
* AP, so send the frame directly to it and
@@ -1275,24 +1296,28 @@ static void ieee80211_rx_michael_mic_rep
/* TODO: verify that this is not triggered by fragmented
* frames (hw does not verify MIC for them). */
- printk(KERN_DEBUG "%s: TKIP hwaccel reported Michael MIC "
- "failure from " MAC_FMT " to " MAC_FMT " keyidx=%d\n",
- dev->name, MAC_ARG(hdr->addr2), MAC_ARG(hdr->addr1), keyidx);
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: TKIP hwaccel reported Michael MIC "
+ "failure from " MAC_FMT " to " MAC_FMT " keyidx=%d\n",
+ dev->name, MAC_ARG(hdr->addr2), MAC_ARG(hdr->addr1),
+ keyidx);
if (!sta) {
/* Some hardware versions seem to generate incorrect
* Michael MIC reports; ignore them to avoid triggering
* countermeasures. */
- printk(KERN_DEBUG "%s: ignored spurious Michael MIC "
- "error for unknown address " MAC_FMT "\n",
- dev->name, MAC_ARG(hdr->addr2));
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: ignored spurious Michael MIC "
+ "error for unknown address " MAC_FMT "\n",
+ dev->name, MAC_ARG(hdr->addr2));
goto ignore;
}
if (!(rx->fc & IEEE80211_FCTL_PROTECTED)) {
- printk(KERN_DEBUG "%s: ignored spurious Michael MIC "
- "error for a frame with no ISWEP flag (src "
- MAC_FMT ")\n", dev->name, MAC_ARG(hdr->addr2));
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: ignored spurious Michael MIC "
+ "error for a frame with no ISWEP flag (src "
+ MAC_FMT ")\n", dev->name, MAC_ARG(hdr->addr2));
goto ignore;
}
@@ -1304,9 +1329,11 @@ static void ieee80211_rx_michael_mic_rep
* for group keys and only the AP is sending real multicast
* frames in BSS. */
if (keyidx) {
- printk(KERN_DEBUG "%s: ignored Michael MIC error for "
- "a frame with non-zero keyidx (%d) (src " MAC_FMT
- ")\n", dev->name, keyidx, MAC_ARG(hdr->addr2));
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: ignored Michael MIC "
+ "error for a frame with non-zero keyidx"
+ " (%d) (src " MAC_FMT ")\n", dev->name,
+ keyidx, MAC_ARG(hdr->addr2));
goto ignore;
}
}
@@ -1314,10 +1341,11 @@ static void ieee80211_rx_michael_mic_rep
if ((rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA &&
((rx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_MGMT ||
(rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_AUTH)) {
- printk(KERN_DEBUG "%s: ignored spurious Michael MIC "
- "error for a frame that cannot be encrypted "
- "(fc=0x%04x) (src " MAC_FMT ")\n",
- dev->name, rx->fc, MAC_ARG(hdr->addr2));
+ if (net_ratelimit())
+ printk(KERN_DEBUG "%s: ignored spurious Michael MIC "
+ "error for a frame that cannot be encrypted "
+ "(fc=0x%04x) (src " MAC_FMT ")\n",
+ dev->name, rx->fc, MAC_ARG(hdr->addr2));
goto ignore;
}
--
next prev parent reply other threads:[~2007-08-21 15:06 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-21 14:59 [PATCH 00/27] various cleanups and fixes for mac80211 and drivers Johannes Berg
2007-08-21 14:59 ` [PATCH 01/27] mac80211: fix showing transmitted frames on multiple monitor interfaces Johannes Berg
2007-08-21 14:59 ` [PATCH 02/27] mac80211: fix preamble setting Johannes Berg
2007-08-21 14:59 ` [PATCH 03/27] mac80211: avoid copying packets to interfaces that are down Johannes Berg
2007-08-21 14:59 ` [PATCH 04/27] mac80211: fix key debugfs Johannes Berg
2007-08-21 14:59 ` [PATCH 05/27] mac80211, drivers: remove reset callback Johannes Berg
2007-08-21 14:59 ` [PATCH 06/27] ralink drivers: remove IEEE80211_HW_HOST_GEN_BEACON flag Johannes Berg
2007-08-21 14:59 ` [PATCH 07/27] mac80211: " Johannes Berg
2007-08-21 14:59 ` [PATCH 08/27] mac80211: remove PRISM2_PARAM_RADIO_ENABLED Johannes Berg
2007-08-21 14:59 ` [PATCH 09/27] mac80211: remove PRISM2_HOSTAPD_SET_GENERIC_INFO_ELEM Johannes Berg
2007-08-21 14:59 ` [PATCH 10/27] ralink drivers: remove IEEE80211_HW_DATA_NULLFUNC_ACK Johannes Berg
2007-08-21 14:59 ` [PATCH 11/27] rtl8187: " Johannes Berg
2007-08-21 14:59 ` [PATCH 12/27] p54: " Johannes Berg
2007-08-21 14:59 ` [PATCH 13/27] mac80211: " Johannes Berg
2007-08-21 14:59 ` Johannes Berg [this message]
2007-08-21 14:59 ` [PATCH 15/27] mac80211: remove ieee80211_msg_wep_frame_unknown_key Johannes Berg
2007-08-21 14:59 ` [PATCH 16/27] mac80211: remove radar stuff Johannes Berg
2007-08-21 14:59 ` [PATCH 17/27] mac80211: remove scan struct from hostapd_param Johannes Berg
2007-08-21 14:59 ` [PATCH 18/27] mac80211: fix software decryption Johannes Berg
2007-08-21 14:59 ` [PATCH 19/27] cfg80211: extend radiotap parser by all remaining fields Johannes Berg
2007-08-21 14:59 ` [PATCH 20/27] mac80211: remove unused ioctls (1) Johannes Berg
2007-08-21 14:59 ` [PATCH 21/27] mac80211: remove unused ioctls (2) Johannes Berg
2007-08-21 14:59 ` [PATCH 22/27] mac80211: remove unused ioctls (3) Johannes Berg
2007-08-21 14:59 ` [PATCH 23/27] mac80211: remove unused ioctls (4) Johannes Berg
2007-08-21 14:59 ` [PATCH 24/27] mac80211: remove PRISM2_PARAM_KEY_MGMT Johannes Berg
2007-08-21 14:59 ` [PATCH 25/27] mac80211: kill key_mgmt, use key_management_enabled Johannes Berg
2007-08-21 14:59 ` [PATCH 26/27] mac80211: refactor event sending Johannes Berg
2007-08-23 22:16 ` Michael Wu
2007-08-24 10:10 ` Johannes Berg
2007-08-21 14:59 ` [PATCH 27/27] mac80211: use switch statement in tx code Johannes Berg
2007-08-22 4:21 ` [PATCH 00/27] various cleanups and fixes for mac80211 and drivers Michael Wu
2007-08-23 20:54 ` John W. Linville
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070821150045.531854000@sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=flamingice@sourmilk.net \
--cc=jbenc@suse.cz \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).