Re: [PATCH] tty: always relink the port

From: Johan Hovold
Date: Fri Jan 10 2020 - 05:08:10 EST


On Fri, Dec 27, 2019 at 05:44:34PM +0000, Sudip Mukherjee wrote:
> If the serial device is disconnected and reconnected, it re-enumerates
> properly but does not link it. fwiw, linking means just saving the port
> index, so allow it always as there is no harm in saving the same value
> again even if it tries to relink with the same port.

This is a pretty vague description. Commit fb2b90014d78 ("tty: link tty
and port before configuring it as console") completely broke usb-serial
(and anything else hotpluggable) which obviously depends on being able
to reuse a minor number when a new device is later plugged in after a
disconnect.

Things are crashing left and right due to that stale port-pointer, and I
just had to debug this only to find that this one is sitting in the
tty-linus branch. I know, I know, Christmas and all, but would be nice
to get it into -rc6. :)

> Fixes: fb2b90014d78 ("tty: link tty and port before configuring it as console")

Also note that the offending commit had a stable tag unlike this one.

> Reported-by: Kenneth R. Crudup <kenny@xxxxxxxxx>
> Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@xxxxxxxxx>
> ---
> drivers/tty/tty_port.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c
> index 5023c85ebc6e..044c3cbdcfa4 100644
> --- a/drivers/tty/tty_port.c
> +++ b/drivers/tty/tty_port.c
> @@ -89,8 +89,7 @@ void tty_port_link_device(struct tty_port *port,
> {
> if (WARN_ON(index >= driver->num))
> return;
> - if (!driver->ports[index])
> - driver->ports[index] = port;
> + driver->ports[index] = port;
> }
> EXPORT_SYMBOL_GPL(tty_port_link_device);

Johan