CVE-2023-53682CVE-2023-53682是Linux内核硬件监控子系统(hwmon)中xgene-hwmon驱动存在的一个内存资源泄漏漏洞。该漏洞位于drivers/hwmon/xgene-hwmon.c文件的xgene_hwmon_probe()函数中,具体在第701行和第757行附近。由于驱动在初始化过程中调用了ioremap()和memremap()进行内存映射,但在错误处理路径或函数退出时未能正确释放这些映射资源,导致内存泄漏。Smatch静态分析工具检测到了这一资源泄漏问题(warn: 'ctx->pcc_comm_addr' from ioremap() not released on line: 757)。该漏洞的CVSS 3.1评分为5.5分,属于中等严重等级。虽然该漏洞需要本地低权限访问才能触发,且不影响机密性和完整性,但会对系统可用性产生高影响——长时间运行可能导致内核内存资源耗尽,影响系统稳定性。该漏洞已在多个Linux内核稳定版本中通过将ioremap和memremap替换为devm_ioremap和devm_memremap(设备托管版本,自动释放机制)得到修复。
该漏洞的核心问题在于Linux内核xgene-hwmon驱动的资源管理不当。xgene-hwmon是AppliedMicro X-Gene系列处理器平台上的硬件监控驱动,用于读取CPU温度、电压等传感器数据。在xgene_hwmon_probe()函数初始化过程中,驱动通过ioremap()将PCC(Platform Communication Channel)通信地址映射到内核虚拟地址空间,通过memremap()映射其他物理地址区域。然而,当驱动初始化过程中遇到错误(如传感器注册失败、资源分配失败等)并执行错误处理路径时,函数直接返回或跳转到错误标签,但没有调用iounmap()和memunmap()来释放之前创建的内存映射。此外,即使probe函数成功执行,在驱动卸载时同样存在未释放映射的问题。修复方案是将ioremap()替换为devm_ioremap(),将memremap()替换为devm_memremap()。devm_系列函数是Linux内核的设备资源管理(Device Resource Management)API,它们将资源的释放与设备的生命周期绑定,当设备被卸载或驱动分离时,内核会自动调用相应的释放函数(如devm_ioremap_release),从而避免手动释放遗漏导致的内存泄漏。攻击者利用该漏洞需要本地访问权限,触发条件相对有限,主要影响是长时间运行导致的内存资源耗尽。