From greg@kroah.com Tue Sep 16 23:06:43 2003
Date: Fri, 5 Sep 2003 08:24:36 -0700
From: Greg KH <greg@kroah.com>
To: Ingo Oeser <ingo@oeser-vu.de>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [OOPS] 2.4.22, USB visor module crashing on HotSync.

On Fri, Sep 05, 2003 at 01:30:22PM +0200, Ingo Oeser wrote:
> Hi Greg,
> 
> there seems to be a problem with the visor module and usb_serial.
> 
> Please look at __serial_close() and usb_disconnect() calling it
> in line 1406 vs. line 1408. I would suggest removing 1408 or
> folding it into __serial_close().
> 
> Formal Bug-Reporting follows:
> 
> [1.] One line summary of the problem:
> 
>       USB visor module and usb_serial crashing on HotSync in usb_disconnect
> 
> [2.] Full description of the problem/report:
> 
>       usb_disconnect calls __serial_close() which sets the tty = NULL
>       and afterwards trys to set tty->private_data = NULL
>       which will crash

Nice, someone else reported this yesterday for the ftdi_sio driver.

Can you test the patch below and let me know if this fixes it?

thanks,

greg k-h


--- a/drivers/usb/serial/usbserial.c	Sat Aug 30 23:27:18 2003
+++ b/drivers/usb/serial/usbserial.c	Thu Sep  4 13:48:45 2003
@@ -556,7 +556,10 @@
 		else
 			generic_close(port, filp);
 		port->open_count = 0;
-		port->tty = NULL;
+		if (port->tty) {
+			port->tty->driver_data = NULL;
+			port->tty = NULL;
+		}
 	}
 
 	if (port->serial->type->owner)
@@ -1401,12 +1404,9 @@
 		for (i = 0; i < serial->num_ports; ++i) {
 			port = &serial->port[i];
 			down (&port->sem);
-			if (port->tty != NULL) {
-				while (port->open_count > 0) {
+			if (port->tty != NULL)
+				while (port->open_count > 0)
 					__serial_close(port, NULL);
-				}
-				port->tty->driver_data = NULL;
-			}
 			up (&port->sem);
 		}
 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

