mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
![]() A race condition occurs when gs_start_io() calls either gs_start_rx() or
gs_start_tx(), as those functions briefly drop the port_lock for
usb_ep_queue(). This allows gs_close() and gserial_disconnect() to clear
port.tty and port_usb, respectively.
Use the null-safe TTY Port helper function to wake up TTY.
Example
CPU1: CPU2:
gserial_connect() // lock
gs_close() // await lock
gs_start_rx() // unlock
usb_ep_queue()
gs_close() // lock, reset port.tty and unlock
gs_start_rx() // lock
tty_wakeup() // NPE
Fixes:
|
||
---|---|---|
.. | ||
function | ||
legacy | ||
udc | ||
composite.c | ||
config.c | ||
configfs.c | ||
configfs.h | ||
epautoconf.c | ||
functions.c | ||
Kconfig | ||
Makefile | ||
u_f.c | ||
u_os_desc.h | ||
usbstring.c |