CVE-2022-50539CVE-2022-50539是Linux内核ARM架构OMAP2+子系统中omap4-common驱动的一个引用计数泄漏漏洞。该漏洞位于omap4_sram_init()函数中,在调用of_find_compatible_node()获取设备树节点时,该函数会将返回节点的引用计数加1,但代码在后续处理中没有正确调用of_node_put()来释放该引用,导致节点引用计数无法正确归零。随着系统反复执行相关初始化路径(如模块热插拔、CPU热插拔或系统重启),泄漏的引用计数会不断累积,最终可能引发内存泄漏问题,严重时会导致系统可用性下降甚至内核崩溃。
该漏洞的CVSS评分为5.5,属于中危级别。其攻击向量为本地攻击(AV:L),攻击复杂度低(AC:L),仅需低权限(PR:L),无需用户交互(UI:N)。虽然机密性和完整性影响较低(分别为低和无),但可用性影响为高(A:H),表明该漏洞主要威胁系统的稳定性和可用性。
此漏洞影响基于ARM架构的OMAP4系列处理器平台,包括TI(德州仪器)生产的OMAP4系列SoC芯片,广泛应用于嵌入式设备和工业控制系统中。由于Linux内核在嵌入式领域的广泛应用,该漏洞可能影响大量使用OMAP4平台的IoT设备和嵌入式产品。
从技术层面分析,该漏洞的核心问题在于Linux内核设备树(Device Tree)API的不正确使用。在Linux内核中,of_find_compatible_node()函数用于在设备树中查找兼容指定compatible字符串的节点。该函数的一个重要特性是:当成功找到节点时,会自动将该节点的引用计数(refcount)加1,这意味着调用者有责任在使用完该节点后调用of_node_put()来递减引用计数,否则将导致引用计数泄漏。
在omap4_sram_init()函数中,原始代码调用了of_find_compatible_node()来获取OMAP4 SRAM相关的设备树节点,但缺少对应的of_node_put()调用。这种泄漏在单次执行时影响较小,但在以下场景中会逐渐累积:1)系统频繁进行CPU热插拔操作;2)OMAP4 SRAM初始化模块被反复调用;3)长时间运行的嵌入式系统。
引用计数泄漏的直接后果是节点对象无法被内核正确释放,最终导致内核内存泄漏。当泄漏累积到一定程度时,可能触发内核内存分配失败,引发系统不稳定、进程崩溃或内核panic。攻击者作为本地低权限用户,可通过反复触发相关代码路径(如通过sysfs接口或设备热插拔机制)加速引用计数的累积,从而实现拒绝服务(DoS)攻击。
修复方案是在omap4_sram_init()函数中,在不再使用该节点的位置添加of_node_put()调用,确保引用计数能够正确递减。这一修复已合入Linux内核主线,并回溯到多个稳定版本中。