aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/class
diff options
context:
space:
mode:
authorJohan Hovold <jhovold@gmail.com>2014-05-26 13:23:43 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-05-27 18:04:09 -0400
commit8727bf689a77a79816065e23a7a58a474ad544f9 (patch)
tree88e1424923b12bfb209e2dde731360535886669b /drivers/usb/class
parent703df3297fb1950b0aa53e656108eb936d3f21d9 (diff)
USB: cdc-acm: fix failed open not being detected
Fix errors during open not being returned to userspace. Specifically, failed control-line manipulations or control or read urb submissions would not be detected. Fixes: 7fb57a019f94 ("USB: cdc-acm: Fix potential deadlock (lockdep warning)") Signed-off-by: Johan Hovold <jhovold@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/class')
-rw-r--r--drivers/usb/class/cdc-acm.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 74df311c8505..6c6928a154bd 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -525,17 +525,17 @@ static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
525 acm->control->needs_remote_wakeup = 1; 525 acm->control->needs_remote_wakeup = 1;
526 526
527 acm->ctrlurb->dev = acm->dev; 527 acm->ctrlurb->dev = acm->dev;
528 if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) { 528 retval = usb_submit_urb(acm->ctrlurb, GFP_KERNEL);
529 if (retval) {
529 dev_err(&acm->control->dev, 530 dev_err(&acm->control->dev,
530 "%s - usb_submit_urb(ctrl irq) failed\n", __func__); 531 "%s - usb_submit_urb(ctrl irq) failed\n", __func__);
531 goto error_submit_urb; 532 goto error_submit_urb;
532 } 533 }
533 534
534 acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS; 535 acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS;
535 if (acm_set_control(acm, acm->ctrlout) < 0 && 536 retval = acm_set_control(acm, acm->ctrlout);
536 (acm->ctrl_caps & USB_CDC_CAP_LINE)) { 537 if (retval < 0 && (acm->ctrl_caps & USB_CDC_CAP_LINE))
537 goto error_set_control; 538 goto error_set_control;
538 }
539 539
540 /* 540 /*
541 * Unthrottle device in case the TTY was closed while throttled. 541 * Unthrottle device in case the TTY was closed while throttled.
@@ -545,7 +545,8 @@ static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
545 acm->throttle_req = 0; 545 acm->throttle_req = 0;
546 spin_unlock_irq(&acm->read_lock); 546 spin_unlock_irq(&acm->read_lock);
547 547
548 if (acm_submit_read_urbs(acm, GFP_KERNEL)) 548 retval = acm_submit_read_urbs(acm, GFP_KERNEL);
549 if (retval)
549 goto error_submit_read_urbs; 550 goto error_submit_read_urbs;
550 551
551 usb_autopm_put_interface(acm->control); 552 usb_autopm_put_interface(acm->control);
@@ -564,7 +565,8 @@ error_submit_urb:
564error_get_interface: 565error_get_interface:
565disconnected: 566disconnected:
566 mutex_unlock(&acm->mutex); 567 mutex_unlock(&acm->mutex);
567 return retval; 568
569 return usb_translate_errors(retval);
568} 570}
569 571
570static void acm_port_destruct(struct tty_port *port) 572static void acm_port_destruct(struct tty_port *port)