CVE-2023-53592CVE-2023-53592是Linux内核中SiFive GPIO驱动(gpio-sifive)发现的一个引用计数泄漏漏洞。该漏洞位于sifive_gpio_probe()函数中,在调用of_irq_find_parent()函数获取中断父节点时,该函数返回的设备节点指针带有递增的引用计数,但在代码中未正确调用of_node_put()进行释放,导致每次驱动探测时都会泄漏一个引用计数。
该漏洞虽然不会直接导致权限提升或数据泄露,但由于引用计数的持续累积,最终可能导致系统内存资源耗尽或设备节点管理结构异常,影响系统稳定性和可用性。该漏洞的CVSS评分为5.5分,属于中危级别,需要本地低权限用户即可触发,无需用户交互。
此漏洞影响多个Linux内核稳定版本,包括5.10.x、5.15.x、5.19.x、6.1.x等长期支持版本。SiFive是一家专注于RISC-V架构的处理器公司,其GPIO驱动广泛用于RISC-V架构的开发板和嵌入式设备中。该漏洞已于2025年10月4日公开披露,相关的修复补丁已合并到多个稳定内核分支中。
该漏洞的技术原理涉及Linux内核设备树(Device Tree)API中引用计数的管理机制。在Linux内核中,设备树节点使用引用计数来管理其生命周期,每次获取节点指针时需要正确释放以避免资源泄漏。
具体到CVE-2023-53592,漏洞存在于drivers/gpio/gpio-sifive.c文件的sifive_gpio_probe()函数中。该函数在初始化过程中调用了of_irq_find_parent()来查找GPIO控制器的中断父节点。根据Linux内核设备树API规范,of_irq_find_parent()函数返回的节点指针带有递增的引用计数,调用者有责任在使用完毕后通过of_node_put()释放该引用。
然而,在原始代码中,获取到父节点指针后并未调用of_node_put(),导致每次驱动probe(探测)操作都会泄漏一个引用计数。虽然单次泄漏的影响较小,但在以下场景中可能导致问题:
1. 设备热插拔场景:每次设备重新插拔或驱动重新加载时都会触发probe,导致引用计数持续累积。
2. 长时间运行的嵌入式系统:在嵌入式设备中,系统通常不会重启,引用计数会持续增长。
3. 资源耗尽:虽然单个引用计数占用内存很小,但累积到一定程度可能导致内核设备树管理结构异常。
利用方式方面,该漏洞需要本地访问权限,攻击者可以通过反复触发GPIO驱动的加载和卸载操作来加速引用计数的累积,最终可能导致内核资源管理异常或系统不稳定。CVSS向量显示该漏洞主要影响系统的可用性(Availability: High),对机密性和完整性无影响。