Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -828,7 +828,7 @@ static int receive_data(enum port_type index, struct nozomi *dc)
	struct port *port = &dc->port[index];
	void __iomem *addr = port->dl_addr[port->toggle_dl];
	struct tty_struct *tty = tty_port_tty_get(&port->port);
	int i;
	int i, ret;

	if (unlikely(!tty)) {
		DBG1("tty not open for port: %d?", index);
@@ -844,12 +844,14 @@ static int receive_data(enum port_type index, struct nozomi *dc)

		/* disable interrupt in downlink... */
		disable_transmit_dl(index, dc);
		return 0;
		ret = 0;
		goto put;
	}

	if (unlikely(size == 0)) {
		dev_err(&dc->pdev->dev, "size == 0?\n");
		return 1;
		ret = 1;
		goto put;
	}

	tty_buffer_request_room(tty, size);
@@ -871,8 +873,10 @@ static int receive_data(enum port_type index, struct nozomi *dc)
	}

	set_bit(index, &dc->flip);
	ret = 1;
put:
	tty_kref_put(tty);
	return 1;
	return ret;
}

/* Debug for interrupts */