mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-11-01 06:46:35 +01:00
serial_core: Check for port state when tty is in error state
At the moment opening a serial device node (such as /dev/ttyS3) succeeds even if there is no actual serial device behind it. Reading/writing/ioctls fail as expected because the uart port is not initialized (the type is PORT_UNKNOWN) and the TTY_IO_ERROR error state bit is set fot the tty. However setting line discipline does not have these checks 8250_port.c (8250 is the default choice made by univ8250_console_init()). As the result of PORT_UNKNOWN, uart_port::iobase is NULL which a platform translates onto some address accessing which produces a crash like below. This adds tty_port_initialized() to uart_set_ldisc() to prevent the crash. Found by syzkaller. Signed-off-by: Alexey Kardashevskiy <[email protected]> Link: https://lore.kernel.org/r/[email protected] Cc: stable <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
1 parent
9ea12edeb9
commit
2f70e49ed8
1 file changed
+4
@@ -1467,6 +1467,10 @@ static void uart_set_ldisc(struct tty_struct *tty)
|
||||
{
|
||||
struct uart_state *state = tty->driver_data;
|
||||
struct uart_port *uport;
|
||||
struct tty_port *port = &state->port;
|
||||
|
||||
if (!tty_port_initialized(port))
|
||||
return;
|
||||
|
||||
mutex_lock(&state->port.mutex);
|
||||
uport = uart_port_check(state);
|
||||
|
||||
Reference in new issue
Block a user