diff options
author | Jiri Slaby <jslaby@suse.cz> | 2019-11-22 11:17:21 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-11-22 11:38:38 +0100 |
commit | 2ae0b31e0faced43c011ce3221f2535721cb6a66 (patch) | |
tree | b6431e759d83ae24f77130c75cfe27f8844f2bed /drivers/tty | |
parent | 1250ed7114a977cdc2a67a0c09d6cdda63970eb9 (diff) | |
download | linux-2ae0b31e0faced43c011ce3221f2535721cb6a66.tar.gz linux-2ae0b31e0faced43c011ce3221f2535721cb6a66.tar.bz2 linux-2ae0b31e0faced43c011ce3221f2535721cb6a66.zip |
tty: don't crash in tty_init_dev when missing tty_port
We currently warn the user when tty->port is not set in tty_init_dev
yet. The warning says that the kernel will crash later. And it really
will only few lines below at:
tty->port->itty = tty;
So be nice and avoid the crash -- return an error instead. And update
the warning.
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Link: https://lore.kernel.org/r/20191122101721.7222-1-jslaby@suse.cz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty')
-rw-r--r-- | drivers/tty/tty_io.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index e3076ea01222..f16257fdcd45 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -1344,9 +1344,12 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx) if (!tty->port) tty->port = driver->ports[idx]; - WARN_RATELIMIT(!tty->port, - "%s: %s driver does not set tty->port. This will crash the kernel later. Fix the driver!\n", - __func__, tty->driver->name); + if (WARN_RATELIMIT(!tty->port, + "%s: %s driver does not set tty->port. This would crash the kernel. Fix the driver!\n", + __func__, tty->driver->name)) { + retval = -EINVAL; + goto err_release_lock; + } retval = tty_ldisc_lock(tty, 5 * HZ); if (retval) |