diff options
| author | Jussi Kivilinna <jussi.kivilinna@mbnet.fi> | 2008-03-04 13:05:27 -0500 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2008-03-04 18:36:39 -0500 |
| commit | cdb2a9fe63575dd1eb82b724bbd0aa5e0dd89fa0 (patch) | |
| tree | f0a41d799f0d9bab6dd91c2475adcc9178a71d9d | |
| parent | 8a96df80b3ddb2410045a26ea19eeccb5f2d2d11 (diff) | |
rndis_wlan: fix broken data copy
Replace broken code that attempted to copy 6 byte array to 64-bit
integer. Due to missing cast to 64-bit integer, left shift operation
were 32-bit and lead to bytes been copied over each other. New code
uses simple memcpy, for greater readability and efficiency.
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
| -rw-r--r-- | drivers/net/wireless/rndis_wlan.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c index d9460aed1f22..10b776c1adc5 100644 --- a/drivers/net/wireless/rndis_wlan.c +++ b/drivers/net/wireless/rndis_wlan.c | |||
| @@ -260,7 +260,7 @@ struct NDIS_802_11_KEY { | |||
| 260 | __le32 KeyLength; | 260 | __le32 KeyLength; |
| 261 | u8 Bssid[6]; | 261 | u8 Bssid[6]; |
| 262 | u8 Padding[6]; | 262 | u8 Padding[6]; |
| 263 | __le64 KeyRSC; | 263 | u8 KeyRSC[8]; |
| 264 | u8 KeyMaterial[32]; | 264 | u8 KeyMaterial[32]; |
| 265 | } __attribute__((packed)); | 265 | } __attribute__((packed)); |
| 266 | 266 | ||
| @@ -1508,7 +1508,7 @@ static int rndis_iw_set_encode_ext(struct net_device *dev, | |||
| 1508 | struct usbnet *usbdev = dev->priv; | 1508 | struct usbnet *usbdev = dev->priv; |
| 1509 | struct rndis_wext_private *priv = get_rndis_wext_priv(usbdev); | 1509 | struct rndis_wext_private *priv = get_rndis_wext_priv(usbdev); |
| 1510 | struct NDIS_802_11_KEY ndis_key; | 1510 | struct NDIS_802_11_KEY ndis_key; |
| 1511 | int i, keyidx, ret; | 1511 | int keyidx, ret; |
| 1512 | u8 *addr; | 1512 | u8 *addr; |
| 1513 | 1513 | ||
| 1514 | keyidx = wrqu->encoding.flags & IW_ENCODE_INDEX; | 1514 | keyidx = wrqu->encoding.flags & IW_ENCODE_INDEX; |
| @@ -1543,9 +1543,7 @@ static int rndis_iw_set_encode_ext(struct net_device *dev, | |||
| 1543 | ndis_key.KeyIndex = cpu_to_le32(keyidx); | 1543 | ndis_key.KeyIndex = cpu_to_le32(keyidx); |
| 1544 | 1544 | ||
| 1545 | if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { | 1545 | if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) { |
| 1546 | for (i = 0; i < 6; i++) | 1546 | memcpy(ndis_key.KeyRSC, ext->rx_seq, 6); |
| 1547 | ndis_key.KeyRSC |= | ||
| 1548 | cpu_to_le64(ext->rx_seq[i] << (i * 8)); | ||
| 1549 | ndis_key.KeyIndex |= cpu_to_le32(1 << 29); | 1547 | ndis_key.KeyIndex |= cpu_to_le32(1 << 29); |
| 1550 | } | 1548 | } |
| 1551 | 1549 | ||
