Hi,

the sierra driver does not directly use usb_kill_urb(). It uses a wrapper.
This wrapper means that callbacks which are running are not killed during
close, resubmitting and illicitly pushing data into the tty layer.
The whole purpose of usb_kill_urb() is subverted. The wrapper must be removed.
The same problem as the option driver.

        Regards
                Oliver

Signed-off-by: Oliver Neukum <[EMAIL PROTECTED]>
-----

--- linux-2.6.21-rc4/drivers/usb/serial/sierra.c.alt    2007-03-20 
13:46:15.000000000 +0100
+++ linux-2.6.21-rc4/drivers/usb/serial/sierra.c        2007-03-20 
13:46:22.000000000 +0100
@@ -456,12 +456,6 @@
        return (0);
 }
 
-static inline void stop_urb(struct urb *urb)
-{
-       if (urb && urb->status == -EINPROGRESS)
-               usb_kill_urb(urb);
-}
-
 static void sierra_close(struct usb_serial_port *port, struct file *filp)
 {
        int i;
@@ -479,9 +473,9 @@
 
                /* Stop reading/writing urbs */
                for (i = 0; i < N_IN_URB; i++)
-                       stop_urb(portdata->in_urbs[i]);
+                       usb_unlink_urb(portdata->in_urbs[i]);
                for (i = 0; i < N_OUT_URB; i++)
-                       stop_urb(portdata->out_urbs[i]);
+                       usb_unlink_urb(portdata->out_urbs[i]);
        }
        port->tty = NULL;
 }
@@ -585,9 +579,9 @@
                port = serial->port[i];
                portdata = usb_get_serial_port_data(port);
                for (j = 0; j < N_IN_URB; j++)
-                       stop_urb(portdata->in_urbs[j]);
+                       usb_unlink_urb(portdata->in_urbs[j]);
                for (j = 0; j < N_OUT_URB; j++)
-                       stop_urb(portdata->out_urbs[j]);
+                       usb_unlink_urb(portdata->out_urbs[j]);
        }
 
        /* Now free them */

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to