Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7d28e74b97c8eb859fd9f5eb018bb1c75627bd55
Commit:     7d28e74b97c8eb859fd9f5eb018bb1c75627bd55
Parent:     4f93b3e8212df43ff380e118aebb68f6d1e5b060
Author:     Oliver Neukum <[EMAIL PROTECTED]>
AuthorDate: Tue Mar 20 13:41:21 2007 +0100
Committer:  Greg Kroah-Hartman <[EMAIL PROTECTED]>
CommitDate: Fri Apr 27 13:28:37 2007 -0700

    USB: option close race
    
    the option 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.
    
    Signed-off-by: Oliver Neukum <[EMAIL PROTECTED]>
    Signed-off-by: Matthias Urlichs <[EMAIL PROTECTED]>
    Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>
---
 drivers/usb/serial/option.c |   14 ++++----------
 1 files changed, 4 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index e178e6f..2846656 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -591,12 +591,6 @@ static int option_open(struct usb_serial_port *port, 
struct file *filp)
        return (0);
 }
 
-static inline void stop_urb(struct urb *urb)
-{
-       if (urb && urb->status == -EINPROGRESS)
-               usb_kill_urb(urb);
-}
-
 static void option_close(struct usb_serial_port *port, struct file *filp)
 {
        int i;
@@ -614,9 +608,9 @@ static void option_close(struct usb_serial_port *port, 
struct file *filp)
 
                /* Stop reading/writing urbs */
                for (i = 0; i < N_IN_URB; i++)
-                       stop_urb(portdata->in_urbs[i]);
+                       usb_kill_urb(portdata->in_urbs[i]);
                for (i = 0; i < N_OUT_URB; i++)
-                       stop_urb(portdata->out_urbs[i]);
+                       usb_kill_urb(portdata->out_urbs[i]);
        }
        port->tty = NULL;
 }
@@ -747,9 +741,9 @@ static void option_shutdown(struct usb_serial *serial)
                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_kill_urb(portdata->in_urbs[j]);
                for (j = 0; j < N_OUT_URB; j++)
-                       stop_urb(portdata->out_urbs[j]);
+                       usb_kill_urb(portdata->out_urbs[j]);
        }
 
        /* Now free them */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to