IPBUF安全漏洞报告
English
CVE-2022-50491 CVSS 5.5 中危

CVE-2022-50491 Linux内核coresight cti模块系统挂起漏洞

披露日期: 2025-10-04
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2022-50491
漏洞类型
拒绝服务/系统挂起
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel (coresight CTI驱动)

相关标签

Linux KernelcoresightCTI拒绝服务系统挂起原子上下文runtime PMARMperf本地提权

漏洞概述

CVE-2022-50491是Linux内核coresight CTI(Cross Trigger Interface,交叉触发接口)驱动中的一个高可用性影响漏洞。该漏洞源于cti_enable_hw()和cti_disable_hw()函数在原子上下文(atomic context)中被调用,但内部却使用了运行时电源管理(runtime PM)调用。由于runtime PM在与固件通信时可能导致睡眠(sleep),而原子上下文中不允许睡眠操作,这会导致系统在特定场景下发生挂起(hang)。

该问题在Juno开发平台上运行Perf Coresight测试或执行perf record命令时触发,会导致系统完全无响应。从CVSS评分来看,该漏洞评分为5.5分,属于中危级别,攻击向量为本地(AV:L),需要低权限(PR:L),无需用户交互(UI:N),机密性影响低(C:L),完整性影响无(I:N),可用性影响高(A:H)。虽然利用条件需要本地访问和特定硬件平台,但一旦触发,系统将完全不可用,影响严重。

此漏洞由Linux内核提交3c6656337852(Revert "firmware: arm_scmi: Add clock management to the SCMI power domain")引入并暴露,在commit 692c9a499b28修复了pm_runtime_put()错误设备参数问题后才被完整发现。修复方案是完全移除runtime PM调用,因为构建跟踪路径时已经完成了相关操作。

技术细节

从技术层面分析,该漏洞的根本原因是在coresight CTI驱动的cti_enable_hw()和cti_disable_hw()函数中错误地使用了runtime PM接口(pm_runtime_resume和pm_runtime_put)。

具体而言,coresight子系统在启用跟踪路径时会调用cti_enable_hw(),该函数进而调用__pm_runtime_resume()。然而,cti_enable_hw()是从原子上下文(atomic context)中调用的,调用链为:perf_event_exec -> ctx_resched -> perf_event_sched_in -> ctx_sched_in -> merge_sched_in -> event_sched_in -> etm_event_add -> etm_event_start -> coresight_enable_path -> coresight_control_assoc_ectdev -> cti_enable -> cti_enable_hw。

在原子上下文中,调度器被禁用,不允许执行可能导致睡眠的操作。但pm_runtime_resume()在内部会调用__might_sleep()检查,当检测到在原子上下文中调用时,会触发BUG警告并可能导致系统挂起。特别是在ARM Juno平台上,由于SCMI电源域时钟管理的交互,问题更加严重。

利用方式非常简单,只需在受影响平台上执行以下perf命令即可触发:
perf record -e cs_etm//u -- ls

该命令会尝试启用coresight ETM(Embedded Trace Macrocell)跟踪,进而触发CTI启用流程,最终导致系统挂起。修复方法是在cti_enable_hw()和cti_disable_hw()中完全移除runtime PM调用,因为这些操作在构建跟踪路径时已经完成,无需重复执行。

攻击链分析

STEP 1
步骤1:本地访问
攻击者需要获得受影响系统的本地访问权限(低权限即可),系统需要运行在ARM Juno开发平台或具有coresight硬件支持的设备上
STEP 2
步骤2:执行perf命令
攻击者执行perf record -e cs_etm//u -- ls命令,触发coresight ETM跟踪功能启用
STEP 3
步骤3:触发CTI启用路径
perf事件调度触发etm_event_start -> coresight_enable_path -> coresight_control_assoc_ectdev -> cti_enable -> cti_enable_hw调用链
STEP 4
步骤4:原子上下文违规
cti_enable_hw()在原子上下文中调用pm_runtime_resume(),违反调度器规则,触发__might_sleep()检查
STEP 5
步骤5:系统挂起
在ARM平台上runtime PM与SCMI固件交互时进入睡眠状态,导致系统完全挂起,需要硬重启恢复

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2022-50491 Proof of Concept # Trigger the coresight CTI hang vulnerability on ARM Juno platform # or similar platforms with coresight support # Method 1: Using perf record with cs_etm (CoreSight ETM) tracing # This command triggers the cti_enable_hw() path which calls # pm_runtime_resume() in atomic context, causing system hang perf record -e cs_etm//u -- ls # Method 2: Running Perf Coresight tests # Execute the perf coresight test suite which also triggers # the vulnerable code path perf test coresight # Method 3: Direct sysfs trigger (alternative) # Enable coresight sink and source via sysfs echo 1 > /sys/bus/coresight/devices/tmc_etr0/enable_sink echo 1 > /sys/bus/coresight/devices/etm0/enable_source # Expected result on vulnerable kernel: # BUG: sleeping function called from invalid context # at drivers/base/power/runtime.c:1151 # in_atomic(): 1, irqs_disabled(): 128, non_block: 0 # System will hang and become unresponsive

影响范围

Linux Kernel < 4c365a0c21aaf2b8fcc88de8dc298803288f61ac
Linux Kernel < 6746eae4bbaddcc16b40efb33dab79210828b3ce
Linux Kernel < c51cfba50df8b9e16bfe0e6d4f2f252a4a10063d
Linux Kernel < e33ce54cef5d429430e3b1ae5c8ee4f4103c4fdc
Linux Kernel 6.0.0-00053-g042116d99298 (已知受影响版本)

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)在内核启动参数中添加'nohlt'或禁用coresight相关模块;2)通过配置限制普通用户执行perf record -e cs_etm相关命令的权限;3)如果系统支持,通过BIOS或固件设置禁用coresight硬件功能;4)避免在生产环境的ARM Juno或类似平台上运行coresight相关的perf测试;5)监控系统日志,及时发现'sleeping function called from invalid context'相关警告信息。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表