diff options
author | David Kilroy <kilroyd@googlemail.com> | 2008-09-13 07:22:05 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-09-24 16:17:58 -0400 |
commit | 9930ccee16addda9fa7d9af00cd03cd5a10c8965 (patch) | |
tree | fa1cd1150bbf489294cab82b206ba26d2db2d493 /drivers/net/wireless/rndis_wlan.c | |
parent | d87798450a7635ab1bcc80271a13ce4a53b016a9 (diff) |
wireless: Read scan flags correctly on x86-64
The SIOCSIWSCAN handler is passed data in an iw_point structure. Some
drivers erronously use an iw_param instead.
On 32 bit architectures the difference isn't noticed as the flags
parameter tends to be the only one used by scan handlers and is at the
same offset.
On 64 bit architectures the pointer in the iw_point structure means the
flag parameter is at different offsets in these structures.
Thanks to Jean Tourrilhes for tracking this down for orinoco, and Pavel
Roskin for confirming the fix and identifying other suspect handlers.
Signed-off-by: David Kilroy <kilroyd@googlemail.com>
Acked-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rndis_wlan.c')
-rw-r--r-- | drivers/net/wireless/rndis_wlan.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c index 00e965b9da75..2b414899dfa0 100644 --- a/drivers/net/wireless/rndis_wlan.c +++ b/drivers/net/wireless/rndis_wlan.c | |||
@@ -1627,7 +1627,6 @@ static int rndis_iw_set_encode_ext(struct net_device *dev, | |||
1627 | static int rndis_iw_set_scan(struct net_device *dev, | 1627 | static int rndis_iw_set_scan(struct net_device *dev, |
1628 | struct iw_request_info *info, union iwreq_data *wrqu, char *extra) | 1628 | struct iw_request_info *info, union iwreq_data *wrqu, char *extra) |
1629 | { | 1629 | { |
1630 | struct iw_param *param = &wrqu->param; | ||
1631 | struct usbnet *usbdev = dev->priv; | 1630 | struct usbnet *usbdev = dev->priv; |
1632 | union iwreq_data evt; | 1631 | union iwreq_data evt; |
1633 | int ret = -EINVAL; | 1632 | int ret = -EINVAL; |
@@ -1635,7 +1634,7 @@ static int rndis_iw_set_scan(struct net_device *dev, | |||
1635 | 1634 | ||
1636 | devdbg(usbdev, "SIOCSIWSCAN"); | 1635 | devdbg(usbdev, "SIOCSIWSCAN"); |
1637 | 1636 | ||
1638 | if (param->flags == 0) { | 1637 | if (wrqu->data.flags == 0) { |
1639 | tmp = ccpu2(1); | 1638 | tmp = ccpu2(1); |
1640 | ret = rndis_set_oid(usbdev, OID_802_11_BSSID_LIST_SCAN, &tmp, | 1639 | ret = rndis_set_oid(usbdev, OID_802_11_BSSID_LIST_SCAN, &tmp, |
1641 | sizeof(tmp)); | 1640 | sizeof(tmp)); |