Commit 9237a81a authored by Jiri Slaby's avatar Jiri Slaby Committed by Linus Torvalds

tty: nozomi, fix tty refcounting bug

Don't forget to drop a tty refererence on fail paths in
receive_data().
Signed-off-by: default avatarJiri Slaby <jirislaby@gmail.com>
Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5c9228f0
...@@ -828,7 +828,7 @@ static int receive_data(enum port_type index, struct nozomi *dc) ...@@ -828,7 +828,7 @@ static int receive_data(enum port_type index, struct nozomi *dc)
struct port *port = &dc->port[index]; struct port *port = &dc->port[index];
void __iomem *addr = port->dl_addr[port->toggle_dl]; void __iomem *addr = port->dl_addr[port->toggle_dl];
struct tty_struct *tty = tty_port_tty_get(&port->port); struct tty_struct *tty = tty_port_tty_get(&port->port);
int i; int i, ret;
if (unlikely(!tty)) { if (unlikely(!tty)) {
DBG1("tty not open for port: %d?", index); DBG1("tty not open for port: %d?", index);
...@@ -844,12 +844,14 @@ static int receive_data(enum port_type index, struct nozomi *dc) ...@@ -844,12 +844,14 @@ static int receive_data(enum port_type index, struct nozomi *dc)
/* disable interrupt in downlink... */ /* disable interrupt in downlink... */
disable_transmit_dl(index, dc); disable_transmit_dl(index, dc);
return 0; ret = 0;
goto put;
} }
if (unlikely(size == 0)) { if (unlikely(size == 0)) {
dev_err(&dc->pdev->dev, "size == 0?\n"); dev_err(&dc->pdev->dev, "size == 0?\n");
return 1; ret = 1;
goto put;
} }
tty_buffer_request_room(tty, size); tty_buffer_request_room(tty, size);
...@@ -871,8 +873,10 @@ static int receive_data(enum port_type index, struct nozomi *dc) ...@@ -871,8 +873,10 @@ static int receive_data(enum port_type index, struct nozomi *dc)
} }
set_bit(index, &dc->flip); set_bit(index, &dc->flip);
ret = 1;
put:
tty_kref_put(tty); tty_kref_put(tty);
return 1; return ret;
} }
/* Debug for interrupts */ /* Debug for interrupts */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment