linux-yocto/drivers/thunderbolt
Sergey Senozhatsky 85286e634e thunderbolt: Do not double dequeue a configuration request
commit 0f73628e9d upstream.

Some of our devices crash in tb_cfg_request_dequeue():

 general protection fault, probably for non-canonical address 0xdead000000000122

 CPU: 6 PID: 91007 Comm: kworker/6:2 Tainted: G U W 6.6.65
 RIP: 0010:tb_cfg_request_dequeue+0x2d/0xa0
 Call Trace:
 <TASK>
 ? tb_cfg_request_dequeue+0x2d/0xa0
 tb_cfg_request_work+0x33/0x80
 worker_thread+0x386/0x8f0
 kthread+0xed/0x110
 ret_from_fork+0x38/0x50
 ret_from_fork_asm+0x1b/0x30

The circumstances are unclear, however, the theory is that
tb_cfg_request_work() can be scheduled twice for a request:
first time via frame.callback from ring_work() and second
time from tb_cfg_request().  Both times kworkers will execute
tb_cfg_request_dequeue(), which results in double list_del()
from the ctl->request_queue (the list poison deference hints
at it: 0xdead000000000122).

Do not dequeue requests that don't have TB_CFG_REQUEST_ACTIVE
bit set.

Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Cc: stable@vger.kernel.org
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-06-27 11:07:06 +01:00
..
acpi.c
cap.c
ctl.c thunderbolt: Do not double dequeue a configuration request 2025-06-27 11:07:06 +01:00
ctl.h
debugfs.c
dma_port.c
dma_port.h
dma_test.c
domain.c
eeprom.c
icm.c
Kconfig
lc.c
Makefile
nhi_ops.c
nhi_regs.h
nhi.c thunderbolt: Add support for Intel Panther Lake-M/P 2025-01-09 13:29:56 +01:00
nhi.h thunderbolt: Add support for Intel Panther Lake-M/P 2025-01-09 13:29:56 +01:00
nvm.c
path.c
property.c
quirks.c
retimer.c thunderbolt: Do not add non-active NVM if NVM upgrade is disabled for retimer 2025-06-04 14:40:06 +02:00
sb_regs.h
switch.c
tb_msgs.h
tb_regs.h
tb.c thunderbolt: Scan retimers after device router has been enumerated 2025-05-02 07:47:03 +02:00
tb.h
test.c
tmu.c
tunnel.c
tunnel.h
usb4_port.c
usb4.c
xdomain.c