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

Commit 2f7c069b authored by Peter Hurley's avatar Peter Hurley Committed by David S. Miller
Browse files

net/irda: Hold port lock while bumping blocked_open



Although tty_lock() already protects concurrent update to
blocked_open, that fails to meet the separation-of-concerns between
tty_port and tty.

Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a4ed2e73
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -317,8 +317,8 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self,
	spin_lock_irqsave(&port->lock, flags);
	if (!tty_hung_up_p(filp))
		port->count--;
	spin_unlock_irqrestore(&port->lock, flags);
	port->blocked_open++;
	spin_unlock_irqrestore(&port->lock, flags);

	while (1) {
		if (tty->termios.c_cflag & CBAUD)
@@ -362,8 +362,8 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self,
	spin_lock_irqsave(&port->lock, flags);
	if (!tty_hung_up_p(filp))
		port->count++;
	spin_unlock_irqrestore(&port->lock, flags);
	port->blocked_open--;
	spin_unlock_irqrestore(&port->lock, flags);

	IRDA_DEBUG(1, "%s(%d):block_til_ready after blocking on %s open_count=%d\n",
	      __FILE__, __LINE__, tty->driver->name, port->count);