Ver Fonte

tty: Prevent tty_port destruction if tty not released

If the tty driver mistakenly drops the last port reference
before the tty has been released, issue a diagnostic and
abort the port destruction.

This will leak memory and may zombify the port, but might
otherwise keep the machine in runnable state.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Peter Hurley há 12 anos atrás
pai
commit
e3bfea23a6
1 ficheiros alterados com 4 adições e 0 exclusões
  1. 4 0
      drivers/tty/tty_port.c

+ 4 - 0
drivers/tty/tty_port.c

@@ -140,6 +140,10 @@ EXPORT_SYMBOL(tty_port_destroy);
 static void tty_port_destructor(struct kref *kref)
 static void tty_port_destructor(struct kref *kref)
 {
 {
 	struct tty_port *port = container_of(kref, struct tty_port, kref);
 	struct tty_port *port = container_of(kref, struct tty_port, kref);
+
+	/* check if last port ref was dropped before tty release */
+	if (WARN_ON(port->itty))
+		return;
 	if (port->xmit_buf)
 	if (port->xmit_buf)
 		free_page((unsigned long)port->xmit_buf);
 		free_page((unsigned long)port->xmit_buf);
 	tty_port_destroy(port);
 	tty_port_destroy(port);