* [PATCH] airo: Buffer overflow
@ 2009-07-25 21:02 Roel Kluin
2009-07-27 17:12 ` Dan Williams
0 siblings, 1 reply; 2+ messages in thread
From: Roel Kluin @ 2009-07-25 21:02 UTC (permalink / raw)
To: linville, linux-wireless, Andrew Morton
SSID_rid has space for only 3 ssids.
txPowerLevels[i] is read before the bounds check for i
Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
---
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index c70604f..8ce5e4c 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -5918,20 +5918,19 @@ static int airo_set_essid(struct net_device *dev,
readSsidRid(local, &SSID_rid);
/* Check if we asked for `any' */
- if(dwrq->flags == 0) {
+ if (dwrq->flags == 0) {
/* Just send an empty SSID list */
memset(&SSID_rid, 0, sizeof(SSID_rid));
} else {
- int index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
+ unsigned index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
/* Check the size of the string */
- if(dwrq->length > IW_ESSID_MAX_SIZE) {
+ if (dwrq->length > IW_ESSID_MAX_SIZE)
return -E2BIG ;
- }
+
/* Check if index is valid */
- if((index < 0) || (index >= 4)) {
+ if (index >= ARRAY_SIZE(SSID_rid.ssids))
return -EINVAL;
- }
/* Set the SSID */
memset(SSID_rid.ssids[index].ssid, 0,
@@ -6819,7 +6818,7 @@ static int airo_set_txpow(struct net_device *dev,
return -EINVAL;
}
clear_bit (FLAG_RADIO_OFF, &local->flags);
- for (i = 0; cap_rid.txPowerLevels[i] && (i < 8); i++)
+ for (i = 0; i < 8 && cap_rid.txPowerLevels[i]; i++)
if (v == cap_rid.txPowerLevels[i]) {
readConfigRid(local, 1);
local->config.txPower = v;
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] airo: Buffer overflow
2009-07-25 21:02 [PATCH] airo: Buffer overflow Roel Kluin
@ 2009-07-27 17:12 ` Dan Williams
0 siblings, 0 replies; 2+ messages in thread
From: Dan Williams @ 2009-07-27 17:12 UTC (permalink / raw)
To: Roel Kluin; +Cc: linville, linux-wireless, Andrew Morton
On Sat, 2009-07-25 at 23:02 +0200, Roel Kluin wrote:
> SSID_rid has space for only 3 ssids.
> txPowerLevels[i] is read before the bounds check for i
>
> Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
Acked-by: Dan Williams <dcbw@redhat.com>
> ---
> diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
> index c70604f..8ce5e4c 100644
> --- a/drivers/net/wireless/airo.c
> +++ b/drivers/net/wireless/airo.c
> @@ -5918,20 +5918,19 @@ static int airo_set_essid(struct net_device *dev,
> readSsidRid(local, &SSID_rid);
>
> /* Check if we asked for `any' */
> - if(dwrq->flags == 0) {
> + if (dwrq->flags == 0) {
> /* Just send an empty SSID list */
> memset(&SSID_rid, 0, sizeof(SSID_rid));
> } else {
> - int index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
> + unsigned index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
>
> /* Check the size of the string */
> - if(dwrq->length > IW_ESSID_MAX_SIZE) {
> + if (dwrq->length > IW_ESSID_MAX_SIZE)
> return -E2BIG ;
> - }
> +
> /* Check if index is valid */
> - if((index < 0) || (index >= 4)) {
> + if (index >= ARRAY_SIZE(SSID_rid.ssids))
> return -EINVAL;
> - }
>
> /* Set the SSID */
> memset(SSID_rid.ssids[index].ssid, 0,
> @@ -6819,7 +6818,7 @@ static int airo_set_txpow(struct net_device *dev,
> return -EINVAL;
> }
> clear_bit (FLAG_RADIO_OFF, &local->flags);
> - for (i = 0; cap_rid.txPowerLevels[i] && (i < 8); i++)
> + for (i = 0; i < 8 && cap_rid.txPowerLevels[i]; i++)
> if (v == cap_rid.txPowerLevels[i]) {
> readConfigRid(local, 1);
> local->config.txPower = v;
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-07-27 17:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-25 21:02 [PATCH] airo: Buffer overflow Roel Kluin
2009-07-27 17:12 ` Dan Williams
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).