There is usb_get_dev() in gtco_probe(), but there is no usb_put_dev() anywhere in the driver. The patch adds usb_get_dev() to failure handling code of gtco_probe() and to gtco_disconnect((). Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov <khoroshilov@xxxxxxxxx> --- drivers/input/tablet/gtco.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c index 29e01ab6859f..6ec8a3a04672 100644 --- a/drivers/input/tablet/gtco.c +++ b/drivers/input/tablet/gtco.c @@ -858,7 +858,7 @@ static int gtco_probe(struct usb_interface *usbinterface, if (!gtco->buffer) { dev_err(&usbinterface->dev, "No more memory for us buffers\n"); error = -ENOMEM; - goto err_free_devs; + goto err_put_usb; } /* Allocate URB for reports */ @@ -990,6 +990,8 @@ static int gtco_probe(struct usb_interface *usbinterface, err_free_buf: usb_free_coherent(gtco->usbdev, REPORT_MAX_SIZE, gtco->buffer, gtco->buf_dma); + err_put_usb: + usb_put_dev(gtco->usbdev); err_free_devs: input_free_device(input_dev); kfree(gtco); @@ -1013,6 +1015,7 @@ static void gtco_disconnect(struct usb_interface *interface) usb_free_urb(gtco->urbinfo); usb_free_coherent(gtco->usbdev, REPORT_MAX_SIZE, gtco->buffer, gtco->buf_dma); + usb_put_dev(gtco->usbdev); kfree(gtco); } -- 1.8.3.2 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html