diff options
author | Dan Williams <dcbw@redhat.com> | 2006-01-12 15:00:58 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2006-01-16 16:51:53 -0500 |
commit | d6a13a24b76236ade7fd70081ba41a51e8215578 (patch) | |
tree | 85c495d422a6e152789108b8623245886afcd554 /drivers/net | |
parent | a485cde662f5b6b2299ee01a7e9e2c11683f807b (diff) |
[PATCH] drivers/net/wireless: correct reported ssid lengths
ESSIDs can technically include NULL characters. Drivers should not be
adjusting the length of the ESSID before reporting it in their
SIOCGIWESSID handlers. Breaks stuff like wpa_supplicant. Note that ipw
drivers, which seem to currently be the "most correct", don't have this
problem.
Signed-off-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/airo.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/atmel.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/prism54/isl_ioctl.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ray_cs.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/wavelan_cs.c | 2 |
5 files changed, 6 insertions, 6 deletions
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c index ee866fd6957d..65057348838b 100644 --- a/drivers/net/wireless/airo.c +++ b/drivers/net/wireless/airo.c | |||
@@ -5783,7 +5783,7 @@ static int airo_get_essid(struct net_device *dev, | |||
5783 | /* If none, we may want to get the one that was set */ | 5783 | /* If none, we may want to get the one that was set */ |
5784 | 5784 | ||
5785 | /* Push it out ! */ | 5785 | /* Push it out ! */ |
5786 | dwrq->length = status_rid.SSIDlen + 1; | 5786 | dwrq->length = status_rid.SSIDlen; |
5787 | dwrq->flags = 1; /* active */ | 5787 | dwrq->flags = 1; /* active */ |
5788 | 5788 | ||
5789 | return 0; | 5789 | return 0; |
diff --git a/drivers/net/wireless/atmel.c b/drivers/net/wireless/atmel.c index f0ccfef66445..98a76f10a0f7 100644 --- a/drivers/net/wireless/atmel.c +++ b/drivers/net/wireless/atmel.c | |||
@@ -1718,11 +1718,11 @@ static int atmel_get_essid(struct net_device *dev, | |||
1718 | if (priv->new_SSID_size != 0) { | 1718 | if (priv->new_SSID_size != 0) { |
1719 | memcpy(extra, priv->new_SSID, priv->new_SSID_size); | 1719 | memcpy(extra, priv->new_SSID, priv->new_SSID_size); |
1720 | extra[priv->new_SSID_size] = '\0'; | 1720 | extra[priv->new_SSID_size] = '\0'; |
1721 | dwrq->length = priv->new_SSID_size + 1; | 1721 | dwrq->length = priv->new_SSID_size; |
1722 | } else { | 1722 | } else { |
1723 | memcpy(extra, priv->SSID, priv->SSID_size); | 1723 | memcpy(extra, priv->SSID, priv->SSID_size); |
1724 | extra[priv->SSID_size] = '\0'; | 1724 | extra[priv->SSID_size] = '\0'; |
1725 | dwrq->length = priv->SSID_size + 1; | 1725 | dwrq->length = priv->SSID_size; |
1726 | } | 1726 | } |
1727 | 1727 | ||
1728 | dwrq->flags = !priv->connect_to_any_BSS; /* active */ | 1728 | dwrq->flags = !priv->connect_to_any_BSS; /* active */ |
diff --git a/drivers/net/wireless/prism54/isl_ioctl.c b/drivers/net/wireless/prism54/isl_ioctl.c index 135a156db25d..c5cd61c7f927 100644 --- a/drivers/net/wireless/prism54/isl_ioctl.c +++ b/drivers/net/wireless/prism54/isl_ioctl.c | |||
@@ -748,7 +748,7 @@ prism54_get_essid(struct net_device *ndev, struct iw_request_info *info, | |||
748 | if (essid->length) { | 748 | if (essid->length) { |
749 | dwrq->flags = 1; /* set ESSID to ON for Wireless Extensions */ | 749 | dwrq->flags = 1; /* set ESSID to ON for Wireless Extensions */ |
750 | /* if it is to big, trunk it */ | 750 | /* if it is to big, trunk it */ |
751 | dwrq->length = min(IW_ESSID_MAX_SIZE, essid->length + 1); | 751 | dwrq->length = min(IW_ESSID_MAX_SIZE, essid->length); |
752 | } else { | 752 | } else { |
753 | dwrq->flags = 0; | 753 | dwrq->flags = 0; |
754 | dwrq->length = 0; | 754 | dwrq->length = 0; |
diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c index 319180ca7e71..7880d8c31aad 100644 --- a/drivers/net/wireless/ray_cs.c +++ b/drivers/net/wireless/ray_cs.c | |||
@@ -1256,7 +1256,7 @@ static int ray_get_essid(struct net_device *dev, | |||
1256 | extra[IW_ESSID_MAX_SIZE] = '\0'; | 1256 | extra[IW_ESSID_MAX_SIZE] = '\0'; |
1257 | 1257 | ||
1258 | /* Push it out ! */ | 1258 | /* Push it out ! */ |
1259 | dwrq->length = strlen(extra) + 1; | 1259 | dwrq->length = strlen(extra); |
1260 | dwrq->flags = 1; /* active */ | 1260 | dwrq->flags = 1; /* active */ |
1261 | 1261 | ||
1262 | return 0; | 1262 | return 0; |
diff --git a/drivers/net/wireless/wavelan_cs.c b/drivers/net/wireless/wavelan_cs.c index 7e2039f52c49..cf373625fc70 100644 --- a/drivers/net/wireless/wavelan_cs.c +++ b/drivers/net/wireless/wavelan_cs.c | |||
@@ -2280,7 +2280,7 @@ static int wavelan_get_essid(struct net_device *dev, | |||
2280 | extra[IW_ESSID_MAX_SIZE] = '\0'; | 2280 | extra[IW_ESSID_MAX_SIZE] = '\0'; |
2281 | 2281 | ||
2282 | /* Set the length */ | 2282 | /* Set the length */ |
2283 | wrqu->data.length = strlen(extra) + 1; | 2283 | wrqu->data.length = strlen(extra); |
2284 | 2284 | ||
2285 | return 0; | 2285 | return 0; |
2286 | } | 2286 | } |