Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99c893f3 authored by David Woodhouse's avatar David Woodhouse Committed by David S. Miller
Browse files

libertas: Fix up error handling in lbs_setuserscan()

parent c12bdc45
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -293,19 +293,24 @@ 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;

	dur = lbs_parse_dur(buf, count, scan_cfg);
@@ -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;
}