IPBUF安全漏洞报告
English
CVE-2025-71141 CVSS 5.5 中危

CVE-2025-71141: Linux内核drm/tilcdc驱动探针失败时不当清理操作漏洞

披露日期: 2026-01-14
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2025-71141
漏洞类型
不当清理操作/资源管理错误
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核drm/tilcdc驱动

相关标签

Linux内核drm/tilcdc资源管理错误探针延迟不当清理操作本地权限漏洞内核驱动缺陷

漏洞概述

CVE-2025-71141是Linux内核中drm/tilcdc驱动的资源管理缺陷。在设备探针(Probe)失败的情况下,tilcdc_fini()函数会无条件调用drm_kms_helper_poll_fini()和drm_atomic_helper_shutdown()清理函数,导致内核警告和系统不稳定。该漏洞的CVSS评分为5.5,属于中等严重程度。攻击者可通过本地低权限用户身份触发此漏洞,利用探针延迟(Probe Deferral)机制导致内核执行不当的清理操作。虽然漏洞本身不会直接导致代码执行,但可能引发内核警告、信息泄露或系统拒绝服务。修复方案采用标准的goto错误处理模式,确保清理函数仅在成功初始化的资源上调用。

技术细节

漏洞根源在于Linux内核drm/tilcdc驱动中的tilcdc_fini()函数实现逻辑错误。当设备探针过程中遇到失败场景(如依赖资源未就绪导致的探针延迟)时,该函数仍然会调用drm_kms_helper_poll_fini()和drm_atomic_helper_shutdown()这两个清理函数。问题在于这些函数设计为仅在设备成功注册后调用,而探针失败时设备并未完成注册流程。具体表现为:内核在drm_atomic_helper_crtc_duplicate_state处触发警告,因为此时CRTC状态尚未正确初始化。攻击者可通过构造特定的硬件探针失败场景(如操作设备节点触发驱动加载并导致依赖资源不可用)来触发此漏洞。修复方案重写了失败探针的清理路径,采用标准的goto错误处理模式,并移除了不再需要的is_registered标志,确保清理操作仅作用于成功初始化的资源。

攻击链分析

STEP 1
步骤1
攻击者获得系统本地访问权限,以低权限用户身份运行
STEP 2
步骤2
攻击者触发tilcdc DRM驱动的加载过程,可能通过访问/dev/dri/card0等设备节点
STEP 3
步骤3
驱动探针过程中遇到依赖资源不可用(如硬件资源冲突或时钟未就绪),触发探针延迟(Probe Deferral)机制
STEP 4
步骤4
探针失败后,tilcdc_fini()清理函数被调用,但由于is_registered标志处理不当,drm_atomic_helper_shutdown()等函数在未正确初始化的资源上被执行
STEP 5
步骤5
内核在drm_atomic_helper_crtc_duplicate_state处触发WARNING,导致系统日志中出现内核警告信息
STEP 6
步骤6
攻击者可通过反复触发此场景导致内核资源泄漏或系统不稳定,严重情况下可引发拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2025-71141 - Tilcdc Probe Failure Cleanup Issue // This PoC demonstrates triggering the kernel warning by manipulating // hardware probe deferral scenarios #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> /* * Trigger conditions for CVE-2025-71141: * 1. System has tilcdc DRM driver loaded * 2. Probe deferral occurs during driver initialization * 3. tilcdc_fini() is called on uninitialized resources * * Note: This is a kernel-level vulnerability. Exploitation requires: * - Access to a system with vulnerable tilcdc driver * - Ability to trigger probe deferral conditions * - Typically requires root or specific hardware access */ int main() { int fd; const char *device_paths[] = { "/dev/dri/card0", "/dev/dri/by-path/platform-tilcdc-card", NULL }; printf("CVE-2025-71141 PoC - Tilcdc Cleanup Issue\n"); printf("==========================================\n\n"); // Try to access tilcdc device nodes for (int i = 0; device_paths[i] != NULL; i++) { printf("Attempting to open: %s\n", device_paths[i]); fd = open(device_paths[i], O_RDWR); if (fd >= 0) { printf("[+] Successfully opened %s\n", device_paths[i]); close(fd); } else { printf("[-] Failed to open %s: %s\n", device_paths[i], strerror(errno)); } } printf("\n[*] To trigger vulnerability:\n"); printf(" - Load tilcdc driver with deferred probe dependencies\n"); printf(" - Monitor dmesg for kernel warnings during driver unload\n"); printf(" - Look for 'WARNING: CPU' in drm_atomic_helper_* functions\n"); return 0; } // Kernel module approach (requires kernel development): /* #include <linux/module.h> #include <linux/platform_device.h> static int tilcdc_probe_defer_test(void) { // Simulate probe deferral that triggers the vulnerability struct platform_device *pdev; // Trigger conditions: // 1. tilcdc driver probe starts // 2. Resource dependency fails (returns -EPROBE_DEFER) // 3. Driver cleanup path calls drm_atomic_helper_shutdown() // 4. Kernel warning triggered in drm_atomic_helper_crtc_duplicate_state return 0; } module_init(tilcdc_probe_defer_test); */

影响范围

Linux内核 < 包含修复提交21e52dc7762908c3d499cfb493d1b8281fc1d3ab的版本
Linux内核 < 包含修复提交71be8825e83c90c1e020feb77b29e6a99629e642的版本
Linux内核 < 包含修复提交a585c7ef9cabda58088916baedc6573e9a5cd2a7的版本

防御指南

临时缓解措施
临时缓解措施:1) 监控dmesg日志,查找与drm_atomic_helper和tilcdc相关的WARNING信息;2) 如果系统不使用tilcdc驱动,可通过在启动参数中添加'modprobe.blacklist=tilcdc'来禁用该驱动;3) 限制非特权用户对DRM设备节点的访问权限;4) 关注Linux内核安全公告,等待官方修复发布后及时更新内核版本。

参考链接

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