USB: fix memory leak in usbtmc

If an error is returned kfree must also be called.


Signed-off-by: Oliver Neukum <oliver@neukum.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Oliver Neukum 2009-07-02 16:41:39 +02:00 committed by Greg Kroah-Hartman
parent 45e83889eb
commit ca157c4a51

View file

@ -751,7 +751,7 @@ static int get_capabilities(struct usbtmc_device_data *data)
{ {
struct device *dev = &data->usb_dev->dev; struct device *dev = &data->usb_dev->dev;
char *buffer; char *buffer;
int rv; int rv = 0;
buffer = kmalloc(0x18, GFP_KERNEL); buffer = kmalloc(0x18, GFP_KERNEL);
if (!buffer) if (!buffer)
@ -763,7 +763,7 @@ static int get_capabilities(struct usbtmc_device_data *data)
0, 0, buffer, 0x18, USBTMC_TIMEOUT); 0, 0, buffer, 0x18, USBTMC_TIMEOUT);
if (rv < 0) { if (rv < 0) {
dev_err(dev, "usb_control_msg returned %d\n", rv); dev_err(dev, "usb_control_msg returned %d\n", rv);
return rv; goto err_out;
} }
dev_dbg(dev, "GET_CAPABILITIES returned %x\n", buffer[0]); dev_dbg(dev, "GET_CAPABILITIES returned %x\n", buffer[0]);
@ -773,7 +773,8 @@ static int get_capabilities(struct usbtmc_device_data *data)
dev_dbg(dev, "USB488 device capabilities are %x\n", buffer[15]); dev_dbg(dev, "USB488 device capabilities are %x\n", buffer[15]);
if (buffer[0] != USBTMC_STATUS_SUCCESS) { if (buffer[0] != USBTMC_STATUS_SUCCESS) {
dev_err(dev, "GET_CAPABILITIES returned %x\n", buffer[0]); dev_err(dev, "GET_CAPABILITIES returned %x\n", buffer[0]);
return -EPERM; rv = -EPERM;
goto err_out;
} }
data->capabilities.interface_capabilities = buffer[4]; data->capabilities.interface_capabilities = buffer[4];
@ -781,8 +782,9 @@ static int get_capabilities(struct usbtmc_device_data *data)
data->capabilities.usb488_interface_capabilities = buffer[14]; data->capabilities.usb488_interface_capabilities = buffer[14];
data->capabilities.usb488_device_capabilities = buffer[15]; data->capabilities.usb488_device_capabilities = buffer[15];
err_out:
kfree(buffer); kfree(buffer);
return 0; return rv;
} }
#define capability_attribute(name) \ #define capability_attribute(name) \