CVE-2023-53545CVE-2023-53545是Linux内核中AMD amdgpu GPU驱动的一个安全漏洞,于2025年10月4日公开披露。该漏洞位于drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c文件中的amdgpu_vm_bo_del函数中。问题根源在于当驱动尝试取消映射(unmap)并移除csa_va(CSA Virtual Address,命令提交器地址映射)时,没有正确地保留(reserve)根页目录缓冲区对象(Root PD BO),导致Linux内核的锁依赖验证器(lockdep)检测到锁顺序异常并发出警告。
该漏洞的CVSS 3.1评分为5.5分,属于中等严重等级。其攻击向量为本地攻击(AV:L),攻击者需要具有低权限(PR:L),无需用户交互(UI:N)。该漏洞对机密性无影响(C:N),对完整性无影响(I:N),但对可用性影响较高(A:H),可能导致系统不稳定或内核警告。从漏洞描述中的调用栈信息可以看出,该问题在drm_file_free过程中被触发,即当用户关闭GPU文件描述符时,驱动尝试清理csa_va映射,但由于锁顺序不正确,触发了lockdep警告。
此漏洞影响多个Linux内核稳定版本,官方已通过多个commit修复了该问题,包括5daff15cd013422bc6d1efcfe82b586800025384、a3a96bf843c356d1d9b2d7f6d0784b6ee28ca9d0和ae325b245208394279a1dc412c831ebd71befb0d等补丁。
该漏洞的技术核心在于amdgpu驱动中的csa_va(Command Submission Address Virtual Address)资源管理不当。在AMD GPU驱动的虚拟内存管理子系统中,每个进程文件私有数据(fpriv)都关联一个csa_va,用于GPU命令提交。当进程关闭文件描述符时,驱动需要清理这些资源。
具体技术问题如下:
1. 在amdgpu_driver_postclose_kms函数中,当进程退出时需要删除bo_va(Buffer Object Virtual Address),包括csa_va对应的bo_va映射。
2. amdgpu_vm_bo_del函数负责从VM中删除bo_va映射,但在执行删除操作前,必须先保留(reserve)根页目录缓冲区对象(Root PD BO)。
3. 原始代码在调用amdgpu_vm_bo_del删除csa_va时,没有先对Root PD BO进行reserve操作,导致锁的获取顺序与VM正常操作时的锁顺序不一致。
4. Linux内核的lockdep(锁依赖验证器)检测到这种异常的锁获取顺序,会输出警告信息。在最坏情况下,可能导致死锁或系统不稳定。
修复方案(v2版本)增加了对fpriv->csa_va是否为NULL的检查,确保在删除csa_va之前正确保留Root PD BO。修复由Christian König提出,确保了锁的正确获取顺序。
利用方式:本地攻击者只需打开AMD GPU设备文件,执行正常的GPU操作(如打开/关闭文件描述符),即可触发该漏洞,导致内核警告输出。在特定条件下,可能引发系统不稳定或拒绝服务状态。