Skip to content

Commit

Permalink
Input: usbtouchscreen - fix leaks and check return value of usb_submi…
Browse files Browse the repository at this point in the history
…t_urb()

Fix urb leak in error path of initialization and make sure we handle
errors from initial usb_submit_urb().

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
  • Loading branch information
Ondrej Zary authored and Dmitry Torokhov committed Feb 4, 2010
1 parent 5197424 commit 1e87a43
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions drivers/input/touchscreen/usbtouchscreen.c
Original file line number Diff line number Diff line change
Expand Up @@ -1412,7 +1412,7 @@ static int usbtouch_probe(struct usb_interface *intf,
err = type->init(usbtouch);
if (err) {
dbg("%s - type->init() failed, err: %d", __func__, err);
goto out_free_buffers;
goto out_free_urb;
}
}

Expand All @@ -1424,14 +1424,25 @@ static int usbtouch_probe(struct usb_interface *intf,

usb_set_intfdata(intf, usbtouch);

if (usbtouch->type->irq_always)
usb_submit_urb(usbtouch->irq, GFP_KERNEL);
if (usbtouch->type->irq_always) {
err = usb_submit_urb(usbtouch->irq, GFP_KERNEL);
if (err) {
err("%s - usb_submit_urb failed with result: %d",
__func__, err);
goto out_unregister_input;
}
}

return 0;

out_unregister_input:
input_unregister_device(input_dev);
input_dev = NULL;
out_do_exit:
if (type->exit)
type->exit(usbtouch);
out_free_urb:
usb_free_urb(usbtouch->irq);
out_free_buffers:
usbtouch_free_buffers(udev, usbtouch);
out_free:
Expand Down

0 comments on commit 1e87a43

Please sign in to comment.