Re: ipw2200: "ieee80211: Info elem: parse failed"

From: Andrew Morton
Date: Thu Oct 19 2006 - 22:27:39 EST


On Thu, 19 Oct 2006 11:17:34 +0200
Jiri Slaby <jirislaby@xxxxxxxxx> wrote:

> Hi,
>
> since 2.6.19-rc1 I'm getting these messages from ipw2200 driver:
> ieee80211: Info elem: parse failed: info_element->len + 2 > left :
> info_element->len+2=8 left=2, id=128.
>
> The driver says:
> ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.1.4km
> ipw2200: Copyright(c) 2003-2006 Intel Corporation
> ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 3
> PCI: setting IRQ 3 as level-triggered
> ACPI: PCI Interrupt 0000:02:07.0[A] -> Link [LNKC] -> GSI 3 (level, low) -> IRQ 3
> ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection
> ACPI: PCI Interrupt 0000:00:13.2[A] -> Link [LNKD] -> GSI 10 (level, low) -> IRQ 10
>
> and works, but the message is annoying, since the driver prints it again and
> again. What could be wrong?
>

I suspect it was always failing. But the failure message has been changed
so that it actually comes out.



commit f09fc44d8c25f22c4d985bb93857338ed02feac6
Author: Zhu Yi <yi.zhu@xxxxxxxxx>
Date: Mon Aug 21 11:34:19 2006 +0800

[PATCH] ieee80211: Workaround malformed 802.11 frames from AP

Stop processing further but return success when we receive a malformed
packet from the AP. We need this patch to workaround some AP bugs. For
example, the beacon frames from the Orinoco AP1000 contains an IE (value
= 128) with length equals to 8 but the actual frame length is only 7.

Signed-off-by: Zhu Yi <yi.zhu@xxxxxxxxx>
Signed-off-by: John W. Linville <linville@xxxxxxxxxxxxx>

diff --git a/net/ieee80211/ieee80211_rx.c b/net/ieee80211/ieee80211_rx.c
index d60358d..7707041 100644
--- a/net/ieee80211/ieee80211_rx.c
+++ b/net/ieee80211/ieee80211_rx.c
@@ -1078,13 +1078,16 @@ #endif

while (length >= sizeof(*info_element)) {
if (sizeof(*info_element) + info_element->len > length) {
- IEEE80211_DEBUG_MGMT("Info elem: parse failed: "
- "info_element->len + 2 > left : "
- "info_element->len+2=%zd left=%d, id=%d.\n",
- info_element->len +
- sizeof(*info_element),
- length, info_element->id);
- return 1;
+ IEEE80211_ERROR("Info elem: parse failed: "
+ "info_element->len + 2 > left : "
+ "info_element->len+2=%zd left=%d, id=%d.\n",
+ info_element->len +
+ sizeof(*info_element),
+ length, info_element->id);
+ /* We stop processing but don't return an error here
+ * because some misbehaviour APs break this rule. ie.
+ * Orinoco AP1000. */
+ break;
}

switch (info_element->id) {

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/