Commit fe0ebeaf authored by Qiu-ji Chen's avatar Qiu-ji Chen Committed by Greg Kroah-Hartman
Browse files

staging: greybus: uart: Fix atomicity violation in get_serial_info()



Our static checker found a bug where set_serial_info() uses a mutex, but
get_serial_info() does not. Fortunately, the impact of this is relatively
minor. It doesn't cause a crash or any other serious issues. However, if a
race condition occurs between set_serial_info() and get_serial_info(),
there is a chance that the data returned by get_serial_info() will be
meaningless.

Signed-off-by: default avatarQiu-ji Chen <chenqiuji666@gmail.com>
Fixes: 0aad5ad5 ("greybus/uart: switch to ->[sg]et_serial()")
Reviewed-by: default avatarJohan Hovold <johan+linaro@kernel.org>
Reviewed-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: default avatarAlex Elder <elder@riscstar.com>
Link: https://lore.kernel.org/r/20241107113337.402042-1-chenqiuji666@gmail.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c4838879
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -596,11 +596,13 @@ static int get_serial_info(struct tty_struct *tty,
	struct gb_tty *gb_tty = tty->driver_data;

	ss->line = gb_tty->minor;
	mutex_lock(&gb_tty->port.mutex);
	ss->close_delay = jiffies_to_msecs(gb_tty->port.close_delay) / 10;
	ss->closing_wait =
		gb_tty->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
		ASYNC_CLOSING_WAIT_NONE :
		jiffies_to_msecs(gb_tty->port.closing_wait) / 10;
	mutex_unlock(&gb_tty->port.mutex);

	return 0;
}