Hi,
open takes the semaphore too late. This fixes it.
Regards
Oliver
Signed-off-by: Oliver Neukum <[EMAIL PROTECTED]>
You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.
===================================================================
[EMAIL PROTECTED], 2005-01-25 10:20:45+01:00, [EMAIL PROTECTED]
- open/disconnect race
cdc-acm.c | 19 +++++++++++++------
1 files changed, 13 insertions(+), 6 deletions(-)
diff -Nru a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
--- a/drivers/usb/class/cdc-acm.c 2005-01-25 10:23:11 +01:00
+++ b/drivers/usb/class/cdc-acm.c 2005-01-25 10:23:11 +01:00
@@ -261,16 +261,22 @@
static int acm_tty_open(struct tty_struct *tty, struct file *filp)
{
- struct acm *acm = acm_table[tty->index];
+ struct acm *acm;
+ int rv = -EINVAL;
dbg("Entering acm_tty_open.\n");
+
+ down(&open_sem);
+ acm = acm_table[tty->index];
if (!acm || !acm->dev)
- return -EINVAL;
+ goto err_out;
+ else
+ rv = 0;
tty->driver_data = acm;
acm->tty = tty;
- down(&open_sem);
+
if (acm->used) {
goto done;
@@ -279,7 +285,8 @@
acm->ctrlurb->dev = acm->dev;
if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
dbg("usb_submit_urb(ctrl irq) failed");
- goto bail_out;
+ rv = -EIO;
+ goto err_out;
}
acm->readurb->dev = acm->dev;
@@ -297,14 +304,14 @@
done:
acm->used++;
+err_out:
up(&open_sem);
- return 0;
+ return rv;
full_bailout:
usb_kill_urb(acm->readurb);
bail_out_and_unlink:
usb_kill_urb(acm->ctrlurb);
-bail_out:
up(&open_sem);
return -EIO;
}
===================================================================
This BitKeeper patch contains the following changesets:
1.2027
## Wrapped with gzip_uu ##
M'XL( /\/]D$ [54:T_;,!3]'/\*2TC3-I3$=IY-%00#M"'00&SL"T/(=2YM
MU-2N;(>'E!\_)QW=V 1L:$NB7%W?XW,?.<X&/C.@"T\U]35HM($_*&.="U))
M"&9J 4TMVUL7.%7*!<)^*51-4[/PLP8PX8W2<Y8BASCA5LRPHS&%1X-HO6+O
MEE!XI_OOSXYV3A$J2[P[XW(*G\#BLD16Z6O>5&:;VUFC9& [EMAIL PROTECTED]"+;HU
MM&.$,'<G-(M(DG8T)7'6"5I1RF,*%6%QGL9HU<CVKPT\Y$D(93'-'-.HB_/<
ME;^':>#8,TR2D-"0)[EMAIL PROTECTED])[EMAIL PROTECTED]),JQJ
M(Y24("S67 ZQ*[B/$(G/Z:(_+^\$"*<H*UGBJYTW[()6S,)[EMAIL PROTECTED]
M+DFS4=I-1)1<[EMAIL PROTECTED]@FSRV*@>\(F&&Q.*2OAKYOZC)&1$\RCOV"AC;)#*
M$YN>[EMAIL PROTECTED]"I:?G4PW3BS_H@"8N 4WBCJ5)[EMAIL PROTECTED]>D#4=&\B/)G
M115A/_U/JK)\#MC @B]G2@,&KIO:'?U#O!KZ,?;US? XG9P\-?\7R&Z/I3&F
MZ* W#'G&ZM;IVK'AM^XU1EXMG<RO<8G]_8./7W:.QCTVZ;'(J]2-?/VJ/Q27
MKOPW0RAU;%Z_O^Q9+BV?-'!N[9V_5<L*;B_&?<I\E3+'$?*\J;([EMAIL PROTECTED]:7JK4N
M(30&[EMAIL PROTECTED])P-OC/L'N=J.Q[_1G7 1B,'_>X7:"\BM-^Z,IX&
BVVKIFAOWD<[EMAIL PROTECTED];MI%F=,HS1E0] WK"35CEP4
-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel