CVE-2022-50528CVE-2022-50528是Linux内核中drm/amdkfd(AMD GPU Kernel Fusion Driver)驱动模块的一个内存泄漏漏洞。该漏洞位于_gpuvm_import_dmabuf()函数中,可能导致内存泄漏和段错误(seg fault)。amdkfd是AMD为其GPU设备提供的内核融合驱动,负责管理GPU虚拟内存(GPUVM)和与用户空间进程的交互。当系统通过DMA-BUF机制导入GPU缓冲区时,如果_gpuvm_import_dmabuf()函数中的资源分配或错误处理路径不正确,可能导致已分配的内存未被正确释放,从而引发内存泄漏。在某些情况下,泄漏积累或异常状态可能进一步触发空指针解引用,导致段错误使内核崩溃。该漏洞CVSS评分为5.5,属于中危级别,攻击者需要本地低权限访问即可触发,不需要用户交互。该漏洞主要影响系统的可用性,可能导致内核崩溃(kernel panic)或系统不稳定。由于涉及GPU驱动,该漏洞在云计算、虚拟化及高性能计算环境中影响较大,因为这些场景中GPU资源的分配和释放非常频繁。修复该漏洞需要确保_gpuvm_import_dmabuf()函数在所有错误处理路径中正确释放已分配的内存资源。
该漏洞存在于Linux内核的drm/amdkfd驱动模块的_gpuvm_import_dmabuf()函数中。DMA-BUF是Linux内核中用于跨设备共享缓冲区的框架,amdkfd驱动通过该框架将DMA缓冲区导入到GPU虚拟内存管理(GPUVM)系统中。漏洞的根本原因是_gpuvm_import_dmabuf()函数在某些错误处理路径中未能正确释放已分配的内存资源。具体而言,当函数在执行过程中遇到错误并提前返回时,之前分配的内存对象(如GPUVM BO对象、映射结构等)未被正确释放,导致内存泄漏。此外,如果某些指针在资源释放后仍被访问,可能触发空指针解引用,导致段错误(segfault)。攻击者可以通过编写特定的本地程序,利用ioctl接口调用amdkfd驱动的相关功能,触发_gpuvm_import_dmabuf()函数的错误路径,从而触发内存泄漏。持续的内存泄漏会消耗系统内存资源,最终可能导致系统不稳定或内核OOM(Out of Memory)。在特定条件下,空指针解引用会直接导致内核崩溃(kernel panic),造成系统拒绝服务(DoS)。修复方案是在所有错误返回路径中添加适当的资源释放代码,确保内存资源被正确管理。