Skip to content

Commit

Permalink
wireless: Read scan flags correctly on x86-64
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
David Kilroy authored and John W. Linville committed Sep 24, 2008
1 parent d877984 commit 9930cce
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 5 deletions.
2 changes: 1 addition & 1 deletion drivers/net/wireless/airo.c
Original file line number Diff line number Diff line change
Expand Up @@ -7107,7 +7107,7 @@ static int airo_get_aplist(struct net_device *dev,
*/
static int airo_set_scan(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *vwrq,
struct iw_point *dwrq,
char *extra)
{
struct airo_info *ai = dev->priv;
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/wireless/atmel.c
Original file line number Diff line number Diff line change
Expand Up @@ -2258,7 +2258,7 @@ static int atmel_get_freq(struct net_device *dev,

static int atmel_set_scan(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *vwrq,
struct iw_point *dwrq,
char *extra)
{
struct atmel_private *priv = netdev_priv(dev);
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/wireless/orinoco.c
Original file line number Diff line number Diff line change
Expand Up @@ -5291,7 +5291,7 @@ static int orinoco_ioctl_getrid(struct net_device *dev,
/* Trigger a scan (look for other cells in the vicinity) */
static int orinoco_ioctl_setscan(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *srq,
struct iw_point *srq,
char *extra)
{
struct orinoco_private *priv = netdev_priv(dev);
Expand Down
3 changes: 1 addition & 2 deletions drivers/net/wireless/rndis_wlan.c
Original file line number Diff line number Diff line change
Expand Up @@ -1627,15 +1627,14 @@ static int rndis_iw_set_encode_ext(struct net_device *dev,
static int rndis_iw_set_scan(struct net_device *dev,
struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
{
struct iw_param *param = &wrqu->param;
struct usbnet *usbdev = dev->priv;
union iwreq_data evt;
int ret = -EINVAL;
__le32 tmp;

devdbg(usbdev, "SIOCSIWSCAN");

if (param->flags == 0) {
if (wrqu->data.flags == 0) {
tmp = ccpu2(1);
ret = rndis_set_oid(usbdev, OID_802_11_BSSID_LIST_SCAN, &tmp,
sizeof(tmp));
Expand Down

0 comments on commit 9930cce

Please sign in to comment.