diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1289-ar6k-essid-one-and-32.patch.patch')
-rw-r--r-- | target/linux/s3c24xx/patches-2.6.24/1289-ar6k-essid-one-and-32.patch.patch | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1289-ar6k-essid-one-and-32.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1289-ar6k-essid-one-and-32.patch.patch new file mode 100644 index 0000000000..38fde19c21 --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.24/1289-ar6k-essid-one-and-32.patch.patch @@ -0,0 +1,44 @@ +From 89e2c1f006e4d5936a8e0edec74d64b71063e3c1 Mon Sep 17 00:00:00 2001 +From: Werner Almesberger <werner@openmoko.org> +Date: Tue, 16 Sep 2008 08:54:07 +0100 +Subject: [PATCH] ar6k-essid-one-and-32.patch + +This patch allows ESSID with length 1, which were rejected because the +stack assumed iwconfig used a different format in the ioctl's payload. + +It also refuses ESSIDs longer than 31 bytes, because there is some +buffer overrun issue buried somewhere else in the stack. In principle, +32 bytes should be fine. + +Open issue: +- where is the 32 bytes overrun ? + +Signed-off-by: Werner Almesberger <werner@openmoko.org> +--- + .../function/wlan/ar6000/ar6000/wireless_ext.c | 9 ++++----- + 1 files changed, 4 insertions(+), 5 deletions(-) + +diff --git a/drivers/sdio/function/wlan/ar6000/ar6000/wireless_ext.c b/drivers/sdio/function/wlan/ar6000/ar6000/wireless_ext.c +index ede8e62..56ceb2e 100644 +--- a/drivers/sdio/function/wlan/ar6000/ar6000/wireless_ext.c ++++ b/drivers/sdio/function/wlan/ar6000/ar6000/wireless_ext.c +@@ -264,12 +264,11 @@ ar6000_ioctl_siwessid(struct net_device *dev, + } + + /* +- * iwconfig passes a null terminated string with length including this +- * so we need to account for this ++ * iwconfig passes a string with length excluding any trailing NUL. ++ * FIXME: we should be able to set an ESSID of 32 bytes, yet things fall ++ * over badly if we do. So we limit the ESSID to 31 bytes. + */ +- if (data->flags && (!data->length || (data->length == 1) || +- ((data->length - 1) > sizeof(ar->arSsid)))) +- { ++ if (data->flags && (!data->length || data->length >= sizeof(ar->arSsid))) { + /* + * ssid is invalid + */ +-- +1.5.6.5 + |