USB: serial: fix tty-device error handling at probe
authorJohan Hovold <johan@kernel.org>
Wed, 18 Feb 2015 03:34:51 +0000 (10:34 +0700)
committerJohan Hovold <johan@kernel.org>
Thu, 26 Feb 2015 16:12:35 +0000 (17:12 +0100)
Add missing error handling when registering the tty device at port
probe. This avoids trying to remove an uninitialised character device
when the port device is removed.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Reported-by: Takashi Iwai <tiwai@suse.de>
Cc: stable <stable@vger.kernel.org> # v2.6.12
Signed-off-by: Johan Hovold <johan@kernel.org>
Acked-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/usb/serial/bus.c

index 5d8d86666b901d19cbdb99f382ac64b6d3f2ef7c..6f91eb9ae81a44ebd3b8eb530594e3d3481e0d65 100644 (file)
@@ -51,6 +51,7 @@ static int usb_serial_device_probe(struct device *dev)
 {
        struct usb_serial_driver *driver;
        struct usb_serial_port *port;
+       struct device *tty_dev;
        int retval = 0;
        int minor;
 
@@ -80,7 +81,15 @@ static int usb_serial_device_probe(struct device *dev)
        }
 
        minor = port->minor;
-       tty_register_device(usb_serial_tty_driver, minor, dev);
+       tty_dev = tty_register_device(usb_serial_tty_driver, minor, dev);
+       if (IS_ERR(tty_dev)) {
+               retval = PTR_ERR(tty_dev);
+               device_remove_file(dev, &dev_attr_port_number);
+               if (driver->port_remove)
+                       driver->port_remove(port);
+               goto exit_with_autopm;
+       }
+
        dev_info(&port->serial->dev->dev,
                 "%s converter now attached to ttyUSB%d\n",
                 driver->description, minor);