Skip to content

Commit

Permalink
libertas: Fix up error handling in lbs_setuserscan()
Browse files Browse the repository at this point in the history
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
David Woodhouse authored and David S. Miller committed Jan 28, 2008
1 parent c12bdc4 commit 99c893f
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions drivers/net/wireless/libertas/debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,18 +293,23 @@ static ssize_t lbs_setuserscan(struct file *file,
struct lbs_ioctl_user_scan_cfg *scan_cfg;
union iwreq_data wrqu;
int dur;
unsigned long addr = get_zeroed_page(GFP_KERNEL);
char *buf = (char *)addr;
char *buf = (char *)get_zeroed_page(GFP_KERNEL);

scan_cfg = kzalloc(sizeof(struct lbs_ioctl_user_scan_cfg), GFP_KERNEL);
if (!scan_cfg)
if (!buf)
return -ENOMEM;

buf_size = min(count, len - 1);
if (copy_from_user(buf, userbuf, buf_size)) {
res = -EFAULT;
goto out_unlock;
goto out_buf;
}

scan_cfg = kzalloc(sizeof(struct lbs_ioctl_user_scan_cfg), GFP_KERNEL);
if (!scan_cfg) {
res = -ENOMEM;
goto out_buf;
}
res = count;

scan_cfg->bsstype = LBS_SCAN_BSS_TYPE_ANY;

Expand All @@ -317,15 +322,19 @@ static ssize_t lbs_setuserscan(struct file *file,

lbs_scan_networks(priv, scan_cfg, 1);
wait_event_interruptible(priv->adapter->cmd_pending,
!priv->adapter->nr_cmd_pending);
priv->adapter->surpriseremoved || !priv->adapter->nr_cmd_pending);

if (priv->adapter->surpriseremoved)
goto out_scan_cfg;

memset(&wrqu, 0x00, sizeof(union iwreq_data));
wireless_send_event(priv->dev, SIOCGIWSCAN, &wrqu, NULL);

out_unlock:
free_page(addr);
out_scan_cfg:
kfree(scan_cfg);
return count;
out_buf:
free_page((unsigned long)buf);
return res;
}


Expand Down

0 comments on commit 99c893f

Please sign in to comment.