CVE-2023-53628CVE-2023-53628是Linux内核中AMD amdgpu图形驱动的一个漏洞,位于gfx_v11_0_hw_fini函数中。该漏洞源于gfx_v11_0_cp_ecc_error_irq_funcs函数在gfx11架构中已被废弃(retired),但在gfx_v11_0_hw_fini函数中仍然调用amdgpu_irq_put来禁用该中断。由于中断功能函数已被移除,尝试访问已释放的函数指针会导致调用跟踪(call trace)异常,可能引发系统崩溃或不可用状态。
该漏洞的CVSS评分为5.5,属于中危级别。攻击向量为本地(AV:L),需要低权限(PR:L),无需用户交互(UI:N)。漏洞对机密性无影响(C:N),对完整性无影响(I:N),但对可用性影响较高(A:H)。这意味着本地低权限用户可以通过触发特定的GPU操作(如GPU恢复流程)来导致系统崩溃或不可用。
该漏洞主要影响使用AMD gfx11架构GPU(通常是较新的RDNA/RDNA2系列显卡)的Linux系统。当系统进行GPU恢复(gpu_recover)操作时,例如通过debugfs触发reset,会调用gfx_v11_0_hw_fini函数,进而触发该漏洞。漏洞已在多个版本的Linux内核中通过提交31b07aec4a2bdcab00770ea3a18efe49734ce153和720b47229a5b24061d1c2e29ddb6043a59178d79修复。
该漏洞的技术原理涉及Linux内核amdgpu驱动中gfx11架构的中断处理机制。在gfx11架构中,gfx.cp_ecc_error_irq(图形命令处理器的ECC错误中断)已被废弃(retired),因此对应的中断处理函数gfx_v11_0_cp_ecc_error_irq_funcs也被移除。
然而,在gfx_v11_0_hw_fini函数中,代码仍然调用amdgpu_irq_put来尝试禁用该中断。由于中断的funcs指针已经为NULL或无效,amdgpu_irq_put在执行过程中会尝试访问这些无效的函数指针,导致空指针解引用或调用已释放的内存区域。
漏洞触发路径如下:
1. 用户通过debugfs或其他机制触发GPU reset操作(amdgpu_debugfs_reset_work)
2. 系统调用amdgpu_device_gpu_recover进行GPU恢复
3. 恢复过程中调用amdgpu_device_pre_asic_reset
4. 进而调用amdgpu_device_ip_suspend和amdgpu_device_ip_suspend_phase2
5. 最终调用gfx_v11_0_suspend和gfx_v11_0_hw_fini
6. 在hw_fini中尝试禁用已废弃的中断,触发空指针解引用
修复方案包括:删除gfx_v11_0_cp_ecc_error_irq_funcs的定义;在amdgpu_gfx_ras_late_init函数中添加对gfx11的判断;通过检查cp_ecc_error_irq.funcs是否为空来判断是否需要禁用该中断,以提供更可持续的解决方案。