Under certain circumstances uart_dtr_rts might cause an oops. It dies because port->tty is NULL. To fix this, let's take a reference of port->tty by tty_port_tty_get. And if it is not there already, fail gracefully. After all, indeed drop the reference. Signed-off-by: Jiri Slaby <jslaby@xxxxxxx> Cc: Greg KH <gregkh@xxxxxxx> Cc: Alan Cox <alan@xxxxxxxxxxxxxxxxxxx> --- drivers/tty/serial/serial_core.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c index d6e7240..88a0472 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -1531,8 +1531,12 @@ static void uart_dtr_rts(struct tty_port *port, int onoff) * If this is the first open to succeed, * adjust things to suit. */ - if (!test_and_set_bit(ASYNCB_NORMAL_ACTIVE, &port->flags)) - uart_update_termios(port->tty, state); + if (!test_and_set_bit(ASYNCB_NORMAL_ACTIVE, &port->flags)) { + struct tty_struct *tty = tty_port_tty_get(port); + if (tty) + uart_update_termios(tty, state); + tty_kref_put(tty); + } } else uart_clear_mctrl(uport, TIOCM_DTR | TIOCM_RTS); -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html