Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=99c893f34ab932171af27264c0cba4946ca0c355
Commit:     99c893f34ab932171af27264c0cba4946ca0c355
Parent:     c12bdc45d9bc4e576ca54944b708cd45c738ec07
Author:     David Woodhouse <[EMAIL PROTECTED]>
AuthorDate: Sat Dec 8 00:23:55 2007 +0000
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Mon Jan 28 15:06:14 2008 -0800

    libertas: Fix up error handling in lbs_setuserscan()
    
    Signed-off-by: David Woodhouse <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 drivers/net/wireless/libertas/debugfs.c |   29 +++++++++++++++++++----------
 1 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/libertas/debugfs.c 
b/drivers/net/wireless/libertas/debugfs.c
index d3a47cc..b0a76c5 100644
--- a/drivers/net/wireless/libertas/debugfs.c
+++ b/drivers/net/wireless/libertas/debugfs.c
@@ -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;
 
@@ -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;
 }
 
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to