Skip to content

Commit

Permalink
USB: fix usb open suspend race in cdc-acm
Browse files Browse the repository at this point in the history
this fixes a race between open and disconnect in the CDC ACM driver.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Oliver Neukum authored and Greg Kroah-Hartman committed Feb 21, 2008
1 parent 59036e9 commit 94409cc
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions drivers/usb/class/cdc-acm.c
Original file line number Diff line number Diff line change
Expand Up @@ -496,13 +496,10 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
otherwise it is scheduled, and with high data rates data can get lost. */
tty->low_latency = 1;

if (usb_autopm_get_interface(acm->control)) {
mutex_unlock(&open_mutex);
return -EIO;
}
if (usb_autopm_get_interface(acm->control) < 0)
goto early_bail;

mutex_lock(&acm->mutex);
mutex_unlock(&open_mutex);
if (acm->used++) {
usb_autopm_put_interface(acm->control);
goto done;
Expand Down Expand Up @@ -536,6 +533,7 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
done:
err_out:
mutex_unlock(&acm->mutex);
mutex_unlock(&open_mutex);
return rv;

full_bailout:
Expand All @@ -544,6 +542,8 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
usb_autopm_put_interface(acm->control);
acm->used--;
mutex_unlock(&acm->mutex);
early_bail:
mutex_unlock(&open_mutex);
return -EIO;
}

Expand Down

0 comments on commit 94409cc

Please sign in to comment.