driver: uio: fix possible memory leak in __uio_register_device
[linux] / drivers / uio / uio.c
index 1313422..f23ef23 100644 (file)
@@ -491,10 +491,10 @@ static int uio_open(struct inode *inode, struct file *filep)
        if (!idev->info) {
                mutex_unlock(&idev->info_lock);
                ret = -EINVAL;
-               goto err_alloc_listener;
+               goto err_infoopen;
        }
 
-       if (idev->info && idev->info->open)
+       if (idev->info->open)
                ret = idev->info->open(idev->info, inode);
        mutex_unlock(&idev->info_lock);
        if (ret)
@@ -635,7 +635,7 @@ static ssize_t uio_write(struct file *filep, const char __user *buf,
                goto out;
        }
 
-       if (!idev->info || !idev->info->irq) {
+       if (!idev->info->irq) {
                retval = -EIO;
                goto out;
        }
@@ -940,8 +940,10 @@ int __uio_register_device(struct module *owner,
        atomic_set(&idev->event, 0);
 
        ret = uio_get_minor(idev);
-       if (ret)
+       if (ret) {
+               kfree(idev);
                return ret;
+       }
 
        idev->dev.devt = MKDEV(uio_major, idev->minor);
        idev->dev.class = &uio_class;