]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
net: usb: r8152: fix resume reset deadlock
authorSergey Senozhatsky <senozhatsky@chromium.org>
Thu, 29 Jan 2026 03:10:30 +0000 (12:10 +0900)
committerJakub Kicinski <kuba@kernel.org>
Sat, 31 Jan 2026 02:51:11 +0000 (18:51 -0800)
commit6d06bc83a5ae8777a5f7a81c32dd75b8d9b2fe04
tree143117d8f647b6edb57168bdee2ad9a9a3f41cc8
parentf8db6475a83649689c087a8f52486fcc53e627e9
net: usb: r8152: fix resume reset deadlock

rtl8152 can trigger device reset during reset which
potentially can result in a deadlock:

 **** DPM device timeout after 10 seconds; 15 seconds until panic ****
 Call Trace:
 <TASK>
 schedule+0x483/0x1370
 schedule_preempt_disabled+0x15/0x30
 __mutex_lock_common+0x1fd/0x470
 __rtl8152_set_mac_address+0x80/0x1f0
 dev_set_mac_address+0x7f/0x150
 rtl8152_post_reset+0x72/0x150
 usb_reset_device+0x1d0/0x220
 rtl8152_resume+0x99/0xc0
 usb_resume_interface+0x3e/0xc0
 usb_resume_both+0x104/0x150
 usb_resume+0x22/0x110

The problem is that rtl8152 resume calls reset under
tp->control mutex while reset basically re-enters rtl8152
and attempts to acquire the same tp->control lock once
again.

Reset INACCESSIBLE device outside of tp->control mutex
scope to avoid recursive mutex_lock() deadlock.

Fixes: 4933b066fefb ("r8152: If inaccessible at resume time, issue a reset")
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Link: https://patch.msgid.link/20260129031106.3805887-1-senozhatsky@chromium.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/usb/r8152.c