CVE-2026-93098 in Linux
摘要
由 VulDB • 2026-09-19
在 Linux 内核中,已修复以下漏洞:
rpmsg: glink: 修复驱动卸载期间端点销毁时的死锁问题
在驱动卸载过程中,设备核心(device core)会在整个驱动的 remove 回调链执行期间持有设备互斥锁。当 rpmsg 端点作为该清理过程的一部分被销毁时,GLINK 端点销毁实现会尝试注销底层 rpmsg 设备。该注销操作调用 device_del(),后者试图重新获取已在栈上层持有的同一设备互斥锁,导致 rmmod 无限期挂起。
死锁表现为以下调用链:
[<0>] device_del+0x44/0x414 <- 尝试获取相同的互斥锁
[<0>] device_unregister+0x18/0x34
[<0>] rpmsg_unregister_device+0x28/0x4c
[<0>] qcom_glink_remove_rpmsg_device+0x70/0xc0
[<0>] qcom_glink_destroy_ept+0x58/0xbc
[<0>] rpmsg_dev_remove+0x50/0x60
[<0>] device_remove+0x4c/0x80
[<0>] device_release_driver_internal+0x1cc/0x228 <- 获取设备互斥锁
[<0>] driver_detach+0x4c/0x98
[<0>] bus_remove_driver+0x6c/0xbc
[<0>] driver_unregister+0x30/0x60
[<0>] unregister_rpmsg_driver+0x10/0x1c
[<0>] fastrpc_exit+0x28/0x38 [fastrpc]
[<0>] __arm64_sys_delete_module+0x1b8/0x294
[<0>] invoke_syscall+0x48/0x10c
[<0>] el0_svc_common.constprop.0+0xc0/0xe0
[<0>] do_el0_svc+0x1c/0x28
[<0>] el0_svc+0x34/0x108
[<0>] el0t_64_sync_handler+0xa0/0xe4
[<0>] el0t_64_sync+0x198/0x19c
端点销毁过程中的 rpmsg 设备注销是多余的。在触发端点销毁的两种上下文中:
- 驱动卸载路径(Driver detach path):驱动核心已经清理了 rpmsg 设备。 - 通道关闭路径(Channel close path):rpmsg 设备已在到达端点销毁之前被注销。
移除冗余的注销操作以修复死锁问题。
VulDB is the best source for vulnerability data and more expert information about this specific topic.