CVE-2026-43227Linux内核中的clocksource/drivers/sh_tmu驱动程序存在一个安全漏洞。该驱动程序在作为时钟事件提供者运行时,试图在持有原始自旋锁的上下文中调用电源管理和时钟控制函数。由于这些底层函数内部使用常规自旋锁,这种锁嵌套违反了内核的锁定规则,特别是在启用PREEMPT_RT时会导致死锁风险。该问题允许本地低权限用户触发内核警告或崩溃,从而影响系统可用性。
该漏洞源于Linux内核`clocksource/drivers/sh_tmu`驱动程序中的电源管理逻辑设计缺陷。TMU设备既可用作时钟源也可用作时钟事件设备。驱动程序原本设计为在非活跃时通过`pm_runtime_*()`和`clk_*()`函数动态关闭电源和时钟以节能。然而,当TMU注册为时钟事件提供者时,clockevents框架与驱动交互的上下文要求使用`raw_spinlock`(原始自旋锁),以保证在原子上下文中的安全。在此上下文中,驱动程序试图调用可能会睡眠或使用常规自旋锁的电源管理API。这种在持有raw_spinlock时尝试获取普通spinlock的行为违反了锁依赖规则,触发了lockdep警告(BUG: Invalid wait context)。在非PREEMPT_RT构建中,这通常仅为警告,但在PREEMPT_RT构建中,常规自旋锁可以睡眠,导致在原子上下文中发生睡眠,进而引发死锁或内核崩溃。修复方案是在探测后始终保持设备通电和时钟运行,避免在关键中断上下文中进行电源管理。