Commit 8b524944 authored by Qiu-ji Chen's avatar Qiu-ji Chen Committed by Johan Hovold
Browse files

USB: serial: ftdi_sio: 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
inconsistent.

Fixes: 3ae36bed ("fdti_sio: switch to ->[sg]et_serial()")
Signed-off-by: default avatarQiu-ji Chen <chenqiuji666@gmail.com>
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
parent 40827729
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1443,9 +1443,11 @@ static void get_serial_info(struct tty_struct *tty, struct serial_struct *ss)
	struct usb_serial_port *port = tty->driver_data;
	struct ftdi_private *priv = usb_get_serial_port_data(port);

	mutex_lock(&priv->cfg_lock);
	ss->flags = priv->flags;
	ss->baud_base = priv->baud_base;
	ss->custom_divisor = priv->custom_divisor;
	mutex_unlock(&priv->cfg_lock);
}

static int set_serial_info(struct tty_struct *tty, struct serial_struct *ss)