Hi,

there's a race condition between close and disconnect in that driver
leading to a possible double kfree(). It can be prevented by use of a
semaphore.

        Regards
                Oliver

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], 2004-03-18 18:08:35+01:00, [EMAIL PROTECTED]
  - fix disconnect race


 ati_remote.c |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)


diff -Nru a/drivers/usb/input/ati_remote.c b/drivers/usb/input/ati_remote.c
--- a/drivers/usb/input/ati_remote.c    Thu Mar 18 18:09:18 2004
+++ b/drivers/usb/input/ati_remote.c    Thu Mar 18 18:09:18 2004
@@ -139,6 +139,9 @@
  */
 #define FILTER_TIME (HZ >> 4)
 
+/* to protect disconnect and open/close */
+static DECLARE_MUTEX(ati_disc_open_lock);
+
 struct ati_remote {
        struct input_dev idev;          
        struct usb_device *udev;
@@ -301,9 +304,11 @@
 static int ati_remote_open(struct input_dev *inputdev)
 {
        struct ati_remote *ati_remote = inputdev->private;
+       int rv = 0;
 
+       down(&ati_disc_open_lock);
        if (ati_remote->open++)
-               return 0;
+               goto finish;
 
        /* On first open, submit the read urb which was set up previously. */
        ati_remote->irq_urb->dev = ati_remote->udev;
@@ -311,10 +316,13 @@
                dev_err(&ati_remote->interface->dev, 
                        "%s: usb_submit_urb failed!\n", __FUNCTION__);
                ati_remote->open--;
-               return -EIO;
+               rv = -EIO;
        }
 
-       return 0;
+finish:
+       up(&ati_disc_open_lock);
+
+       return rv;
 }
 
 /*
@@ -329,6 +337,8 @@
                return;
        }
        
+       /* mutual exclusion to disconnect */
+       down(&ati_disc_open_lock);      
        if (ati_remote->open <= 0)
                dev_dbg(&ati_remote->interface->dev, "%s: Not open.\n", __FUNCTION__);
        else
@@ -337,6 +347,8 @@
        /* If still present, disconnect will call delete. */
        if (!ati_remote->present && !ati_remote->open)
                ati_remote_delete(ati_remote);
+       
+       up(&ati_disc_open_lock);
 }
 
 /*
@@ -805,12 +817,15 @@
        
        input_unregister_device(&ati_remote->idev);
 
+       down(&ati_disc_open_lock);
        /* Mark device as unplugged */
        ati_remote->present = 0;
 
        /* If device is still open, ati_remote_close will call delete. */
        if (!ati_remote->open)
                ati_remote_delete(ati_remote);
+               
+       up(&ati_disc_open_lock);
 }
 
 /*

===================================================================


This BitKeeper patch contains the following changesets:
1.1182
## Wrapped with gzip_uu ##


begin 664 bkpatch6241
M'XL(`+[764```[55?VO;,!#]V_H4!X71M<269/E'7#*ZM6$+VVCI6ABL(ZBV
M$IO:4I#DM`-_^,D.=-UHTVZLMD%&=_?NW=/#WH$+(W3FJ;I:"XUVX(,R-O/<
M>],[EMAIL PROTECTED]<*Z%,$%=R=:,J!\AEW7*;5Z""YK,
M(WYXMV-_K$3FG4W?7WQZ>X;09`)')9=+\458F$R057K-Z\(<<EO62OI6<VD:
M8;F?JZ:[2^THQM3=$4E"',4=B3%+NIP4A'!&1($I2V.&-O0.'YCC=RB&0Y*2
MB(YITD4)B6-T#,0G)[EMAIL PROTECTED]@RG61CM8Y)A#(]#PSZ!$4;OX/_.<H1R
M&,&BNH6B,KF24N06-,\%^@@]YPB=_I([EMAIL PROTECTED]
MORVU6'[O"MW/:X+67`657+4VX+:::]$H*_Q\([EMAIL PROTECTED];LQ8,;X2
M?,P6+.%BBV;/@N_/*,&[EMAIL PROTECTED]"PN+!/-OK!D>]X$3;#/;<B9SK2-K1&"=T<%W\
MI^7HLRR7PBA\(<]5TFI5M+D`#D8T?%4J+5PG6&FQ%M*Z[=Z'<"7LC1#ROC^Y
M+$"MA`SR6IG!J</)G<!(WPR/<][I$X?X#UZ>[EMAIL PROTECTED],'>AJ6#<5P>I05[`3+6
MM<SA>'KD/DO3^>>+\^G7W9Y%7S7O<^>URJ]?'Z!+-`MQ"`1Y3A?0:[EMAIL PROTECTED]/NCW
M6+]7J!NY^^K!PN,0QRYEMED\;ZD<N44E*U/V0<*&X+!XWH`[FLY.AE"R"27`
[EMAIL PROTECTED]>J3/)?*TL*V6CEQ/+"1`D>>T:%K;\AK$;5ZWIE*R%^>>*$Z%+?2]
M'FG<(VUI/4MQ\H0*LY2$/<HVF+N?15Z*_-JTS61,DBN14H9^`KF_F;[EMAIL PROTECTED]
`
end


-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to