CVE-2023-53567CVE-2023-53567是Linux内核中SPI QUP(Qualcomm Universal Peripheral)驱动存在的一个资源泄漏漏洞。该漏洞位于平台驱动的remove回调函数的错误处理路径中。当设备移除过程中发生错误时,驱动会提前返回,导致DMA(直接内存访问)资源未被正确释放。由于这些资源在后续过程中不会被重新尝试释放,因此会形成永久性的资源泄漏。
SPI QUP驱动是高通(Qualcomm)平台上用于SPI(串行外设接口)通信的核心驱动组件,广泛应用于各类嵌入式设备和移动终端中。该漏洞的影响主要体现在系统可用性方面——随着时间的推移,反复触发该错误路径将导致DMA通道和内存资源不断累积泄漏,最终可能耗尽系统资源,导致系统不稳定或服务不可用。
该漏洞的CVSS评分为5.5,属于中危级别。攻击者需要本地低权限访问权限即可触发,无需用户交互。虽然机密性和完整性不受影响,但高可用性影响意味着在资源受限的嵌入式系统中,该漏洞可能导致严重的服务中断问题。该漏洞已在Linux内核主线及多个稳定版本中通过补丁修复,修复方案为:在错误路径中仅跳过硬件禁用操作(当唤醒设备失败时),但仍需执行DMA资源的清理释放操作。
该漏洞的根本原因在于Linux内核SPI QUP驱动的platform_driver的remove回调函数(spi_qup_remove)中的错误处理逻辑不当。具体技术细节如下:
1. **问题代码路径**:在spi_qup_remove函数中,当尝试唤醒设备(pm_runtime_get_sync)失败时,驱动会直接返回错误码,而跳过了后续的DMA资源释放代码(如dma_release_channel等调用)。
2. **资源泄漏机制**:SPI QUP驱动在probe阶段会申请DMA通道和相关内存资源,这些资源需要在remove阶段对应释放。当remove的错误路径提前返回时,DMA通道描述符、SG列表、映射的DMA缓冲区等资源将永久驻留在系统中。
3. **影响放大效应**:由于该泄漏是永久性的且不可恢复,在设备热插拔场景或驱动反复加载/卸载的场景下(如容器环境、模块频繁加载等),泄漏的资源会不断累积。DMA通道在内核中属于有限资源,当所有DMA通道被耗尽后,新的SPI设备将无法正常工作。
4. **修复方案**:内核补丁将错误处理逻辑修改为:仅在唤醒设备失败时跳过硬件禁用操作(因为设备可能处于休眠状态),但仍然执行DMA资源的清理释放流程,确保资源不会泄漏。
5. **利用条件**:攻击者需要本地访问权限(PR:L),能够触发SPI QUP驱动的remove路径,例如通过手动卸载内核模块、触发设备热拔插事件,或利用其他驱动绑定/解绑机制。