CVE-2022-50523CVE-2022-50523是Linux内核中rockchip时钟驱动(clk: rockchip)的一个内存泄漏漏洞。该漏洞位于`rockchip_clk_register_pll()`函数中,具体涉及PLL(Phase-Locked Loop,锁相环)时钟的注册流程。在内核时钟子系统初始化过程中,当通过`kmemdup()`为`pll->rate_table`分配内存后,如果后续的`clk_register()`调用失败,代码没有正确释放已经分配的`rate_table`内存,导致内存泄漏问题长期累积。
该漏洞的CVSS 3.1评分为5.5分,属于中危级别。其攻击向量为本地(AV:L),需要低权限(PR:L)即可触发,无需用户交互(UI:N)。虽然机密性和完整性影响均为无(C:N/I:N),但可用性影响为高(A:H),意味着攻击者可以通过反复触发该漏洞路径,持续消耗内核内存资源,最终可能导致系统内存耗尽、触发OOM(Out of Memory)killer或导致系统不稳定。
该漏洞影响使用Rockchip系列SoC(片上系统)的嵌入式设备和开发板,包括但不限于RK3288、RK3399、RK3328等常见平台。由于Linux内核时钟驱动是系统启动和运行的基础组件,该漏洞可能在多种使用Rockchip芯片的Android设备、嵌入式Linux系统、单板计算机(如Rock Pi、Firefly等)中存在。漏洞已于2025年10月7日公开披露,并已通过多个内核补丁修复。
该漏洞的技术根源在于Linux内核rockchip时钟驱动中的`rockchip_clk_register_pll()`函数。在PLL时钟注册过程中,驱动首先通过`kmemdup()`函数为`pll->rate_table`分配内存,用于存储PLL支持的不同频率配置信息。`kmemdup()`函数会复制传入的rate_table数据到新分配的内存区域。
随后,代码调用`clk_register()`函数向Linux内核的通用时钟框架注册该PLL时钟。如果`clk_register()`由于某种原因失败(例如资源不足、时钟框架内部错误等),函数会返回错误码并退出注册流程。然而,原代码在错误处理路径中没有释放之前通过`kmemdup()`分配的`pll->rate_table`内存,导致内存泄漏。
利用方式方面,攻击者需要具备本地低权限访问能力。由于该漏洞位于内核时钟驱动中,触发路径相对有限。攻击者可以通过编写特定的内核模块或利用其他内核漏洞间接触发PLL注册失败路径,从而造成内存泄漏。反复触发该漏洞会导致内核内存持续消耗,最终影响系统可用性。
修复方案是在`clk_register()`失败后,在错误返回路径中添加`kfree(pll->rate_table)`调用,确保已分配的内存被正确释放。多个内核稳定分支已包含该修复补丁。