staging: comedi: unionxx5: fix memory leak during subdevice init
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Mon, 15 Apr 2013 17:19:07 +0000 (10:19 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Apr 2013 17:13:01 +0000 (10:13 -0700)
In the subdevice init during the attach of this driver, private data
is allocated for each subdevice. The pointer to this data is then
saved in the subdevice 's->private' so it can be free'ed during the
detach.

In __unioxx5_subdev_init() an error path exists that can happen before
the allocated pointer is saved in s->private. Make sure the allocated
memory is free'ed before returning the error.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/unioxx5.c

index 1b19cc246ab27073c42ace7f6802e47fcada41de..0c243477cbe5cb69674d59bf7aefcafba38a257a 100644 (file)
@@ -380,8 +380,10 @@ static int __unioxx5_subdev_init(struct comedi_device *dev,
                return -ENOMEM;
 
        ret = __comedi_request_region(dev, iobase, UNIOXX5_SIZE);
-       if (ret)
+       if (ret) {
+               kfree(usp);
                return ret;
+       }
        usp->usp_iobase = iobase;
 
        /* defining modules types */