Commit ca157c4a authored by Oliver Neukum's avatar Oliver Neukum Committed by Greg Kroah-Hartman

USB: fix memory leak in usbtmc

If an error is returned kfree must also be called.
Signed-off-by: default avatarOliver Neukum <oliver@neukum.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 45e83889
...@@ -751,7 +751,7 @@ static int get_capabilities(struct usbtmc_device_data *data) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment