mirror-linux/drivers/net/usb
Sergey Senozhatsky 6d06bc83a5 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: 4933b066fe ("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>
2026-01-30 18:51:11 -08:00
..
Kconfig net: usb: lan78xx: add support for generic net selftests via ethtool 2025-08-25 16:22:19 -07:00
Makefile
aqc111.c net: usb: aqc111: debug info before sanitation 2025-05-30 12:14:53 +01:00
aqc111.h
asix.h
asix_common.c net: usb: asix: validate PHY address before use 2025-12-28 09:05:12 +01:00
asix_devices.c net: usb: asix_devices: Check return value of usbnet_get_endpoints 2025-10-29 17:51:48 -07:00
ax88172a.c net: usb: asix: validate PHY address before use 2025-12-28 09:05:12 +01:00
ax88179_178a.c
catc.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
cdc-phonet.c
cdc_eem.c
cdc_ether.c
cdc_mbim.c
cdc_ncm.c cdc_ncm: Flag Intel OEM version of Fibocom L850-GL as WWAN 2025-08-19 17:16:37 -07:00
cdc_subset.c
ch9200.c
cx82310_eth.c
dm9601.c net: usb: dm9601: remove broken SR9700 support 2026-01-15 19:47:28 -08:00
gl620a.c
hso.c
huawei_cdc_ncm.c
int51x1.c
ipheth.c
kalmia.c
kaweth.c
lan78xx.c net: usb: lan78xx: fix use of improperly initialized dev->chipid in lan78xx_reset 2025-10-15 18:27:48 -07:00
lan78xx.h
lg-vl600.c
mcs7830.c
net1080.c
pegasus.c net: usb: pegasus: fix memory leak in update_eth_regs_async() 2026-01-08 08:40:20 -08:00
pegasus.h
plusb.c
qmi_wwan.c net: usb: qmi_wwan: initialize MAC header offset in qmimux_rx_fixup 2025-11-03 17:36:49 -08:00
r8152.c net: usb: r8152: fix resume reset deadlock 2026-01-30 18:51:11 -08:00
r8153_ecm.c
rndis_host.c
rtl8150.c net: usb: rtl8150: fix memory leak on usb_submit_urb() failure 2025-12-23 12:12:34 +01:00
sierra_net.c usb: net: sierra: check for no status endpoint 2025-07-15 16:02:13 -07:00
smsc75xx.c
smsc75xx.h
smsc95xx.c net: usb: smsc95xx: add support for ethtool pause parameters 2025-07-21 17:42:12 -07:00
smsc95xx.h
sr9700.c net: usb: sr9700: fix incorrect command used to write single register 2025-12-30 10:31:54 +01:00
sr9700.h
sr9800.c
sr9800.h
usbnet.c usbnet: limit max_mtu based on device's hard_mtu 2026-01-20 18:58:54 -08:00
zaurus.c