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:
Родитель
45e83889eb
Коммит
ca157c4a51
|
@ -751,7 +751,7 @@ static int get_capabilities(struct usbtmc_device_data *data)
|
|||
{
|
||||
struct device *dev = &data->usb_dev->dev;
|
||||
char *buffer;
|
||||
int rv;
|
||||
int rv = 0;
|
||||
|
||||
buffer = kmalloc(0x18, GFP_KERNEL);
|
||||
if (!buffer)
|
||||
|
@ -763,7 +763,7 @@ static int get_capabilities(struct usbtmc_device_data *data)
|
|||
0, 0, buffer, 0x18, USBTMC_TIMEOUT);
|
||||
if (rv < 0) {
|
||||
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]);
|
||||
|
@ -773,7 +773,8 @@ static int get_capabilities(struct usbtmc_device_data *data)
|
|||
dev_dbg(dev, "USB488 device capabilities are %x\n", buffer[15]);
|
||||
if (buffer[0] != USBTMC_STATUS_SUCCESS) {
|
||||
dev_err(dev, "GET_CAPABILITIES returned %x\n", buffer[0]);
|
||||
return -EPERM;
|
||||
rv = -EPERM;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
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_device_capabilities = buffer[15];
|
||||
|
||||
err_out:
|
||||
kfree(buffer);
|
||||
return 0;
|
||||
return rv;
|
||||
}
|
||||
|
||||
#define capability_attribute(name) \
|
||||
|
|
Загрузка…
Ссылка в новой задаче