USB: usbtmc: fix probe error path
Make sure to initialise the return value to avoid having allocation
failures going unnoticed when allocating interrupt-endpoint resources.
This prevents use-after-free or worse when the device is later unbound.
Fixes: dbf3e7f654
("Implement an ioctl to support the USMTMC-USB488 READ_STATUS_BYTE operation.")
Cc: stable <stable@vger.kernel.org> # 4.6
Cc: Dave Penkler <dpenkler@gmail.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
687e0687f7
commit
2e47c53503
@ -1476,8 +1476,10 @@ static int usbtmc_probe(struct usb_interface *intf,
|
|||||||
if (data->iin_ep_present) {
|
if (data->iin_ep_present) {
|
||||||
/* allocate int urb */
|
/* allocate int urb */
|
||||||
data->iin_urb = usb_alloc_urb(0, GFP_KERNEL);
|
data->iin_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||||
if (!data->iin_urb)
|
if (!data->iin_urb) {
|
||||||
|
retcode = -ENOMEM;
|
||||||
goto error_register;
|
goto error_register;
|
||||||
|
}
|
||||||
|
|
||||||
/* Protect interrupt in endpoint data until iin_urb is freed */
|
/* Protect interrupt in endpoint data until iin_urb is freed */
|
||||||
kref_get(&data->kref);
|
kref_get(&data->kref);
|
||||||
@ -1485,8 +1487,10 @@ static int usbtmc_probe(struct usb_interface *intf,
|
|||||||
/* allocate buffer for interrupt in */
|
/* allocate buffer for interrupt in */
|
||||||
data->iin_buffer = kmalloc(data->iin_wMaxPacketSize,
|
data->iin_buffer = kmalloc(data->iin_wMaxPacketSize,
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!data->iin_buffer)
|
if (!data->iin_buffer) {
|
||||||
|
retcode = -ENOMEM;
|
||||||
goto error_register;
|
goto error_register;
|
||||||
|
}
|
||||||
|
|
||||||
/* fill interrupt urb */
|
/* fill interrupt urb */
|
||||||
usb_fill_int_urb(data->iin_urb, data->usb_dev,
|
usb_fill_int_urb(data->iin_urb, data->usb_dev,
|
||||||
|
Loading…
Reference in New Issue
Block a user