diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2009-06-11 01:58:01 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2009-06-11 01:58:01 -0700 | 
| commit | 4894e4aca82aca927d0404ce61f021f790de4b1e (patch) | |
| tree | bbe0d083829f5858295298f188d885367cf4b1f6 /drivers/net/wireless/airo.c | |
| parent | 05e882f890038c702a4f15d385135d03cf74ad48 (diff) | |
| parent | 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 (diff) | |
| download | olio-linux-3.10-4894e4aca82aca927d0404ce61f021f790de4b1e.tar.xz olio-linux-3.10-4894e4aca82aca927d0404ce61f021f790de4b1e.zip  | |
Merge commit 'v2.6.30' into next
Diffstat (limited to 'drivers/net/wireless/airo.c')
| -rw-r--r-- | drivers/net/wireless/airo.c | 21 | 
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c index c36d3a3d655..9eabf4d1f2e 100644 --- a/drivers/net/wireless/airo.c +++ b/drivers/net/wireless/airo.c @@ -6467,6 +6467,7 @@ static int airo_get_encode(struct net_device *dev,  {  	struct airo_info *local = dev->ml_priv;  	int index = (dwrq->flags & IW_ENCODE_INDEX) - 1; +	int wep_key_len;  	u8 buf[16];  	if (!local->wep_capable) @@ -6500,8 +6501,13 @@ static int airo_get_encode(struct net_device *dev,  	dwrq->flags |= index + 1;  	/* Copy the key to the user buffer */ -	dwrq->length = get_wep_key(local, index, &buf[0], sizeof(buf)); -	memcpy(extra, buf, dwrq->length); +	wep_key_len = get_wep_key(local, index, &buf[0], sizeof(buf)); +	if (wep_key_len < 0) { +		dwrq->length = 0; +	} else { +		dwrq->length = wep_key_len; +		memcpy(extra, buf, dwrq->length); +	}  	return 0;  } @@ -6614,7 +6620,7 @@ static int airo_get_encodeext(struct net_device *dev,  	struct airo_info *local = dev->ml_priv;  	struct iw_point *encoding = &wrqu->encoding;  	struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; -	int idx, max_key_len; +	int idx, max_key_len, wep_key_len;  	u8 buf[16];  	if (!local->wep_capable) @@ -6658,8 +6664,13 @@ static int airo_get_encodeext(struct net_device *dev,  	memset(extra, 0, 16);  	/* Copy the key to the user buffer */ -	ext->key_len = get_wep_key(local, idx, &buf[0], sizeof(buf)); -	memcpy(extra, buf, ext->key_len); +	wep_key_len = get_wep_key(local, idx, &buf[0], sizeof(buf)); +	if (wep_key_len < 0) { +		ext->key_len = 0; +	} else { +		ext->key_len = wep_key_len; +		memcpy(extra, buf, ext->key_len); +	}  	return 0;  }  |