mac80211: avoid "Wireless Event too big" message for assoc response
authorJohn W. Linville <linville@tuxdriver.com>
Wed, 1 Oct 2008 19:45:02 +0000 (15:45 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 6 Oct 2008 23:37:33 +0000 (19:37 -0400)
The association response IEs are sent to userland with an IWEVCUSTOM
event, which unfortunately is limited to a little more than 100 bytes
of IE information with the encoding used.  Many APs send so much
IE information that this message overflows.  When the IWEVCUSTOM
event is too large, the kernel doesn't send it to userland anyway --
better just not to send it.

An attempt was made by Jouni Malinen to correct this issue by
converting to use IWEVASSOCREQIE and IWEVASSOCRESPIE messages instead
("mac80211: Use IWEVASSOCREQIE instead of IWEVCUSTOM").  Unfortunately,
that caused a problem due to 32-/64-bit interactions on some systems and
was reverted after the 'userland ABI' rule was invoked.  That leaves
us with this option instead of a proper fix, at least until we move
to a cfg80211-based solution.

Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/mlme.c

index edc339d649c4678a3d1907dca3de45d50564f22c..49f86fa56bff396adfc99daf8c921be3517a8cfb 100644 (file)
@@ -690,9 +690,11 @@ static void ieee80211_sta_send_associnfo(struct ieee80211_sub_if_data *sdata,
                }
        }
 
-       memset(&wrqu, 0, sizeof(wrqu));
-       wrqu.data.length = len;
-       wireless_send_event(dev, IWEVCUSTOM, &wrqu, buf);
+       if (len <= IW_CUSTOM_MAX) {
+               memset(&wrqu, 0, sizeof(wrqu));
+               wrqu.data.length = len;
+               wireless_send_event(sdata->dev, IWEVCUSTOM, &wrqu, buf);
+       }
 
        kfree(buf);
 }