CVE-2022-50479CVE-2022-50479是Linux内核中drm/amd(AMD显示驱动)子系统中存在的一个潜在内存泄漏漏洞。该漏洞位于AMD GPU驱动代码中,当函数执行过程中遇到错误条件并最终返回NULL时,之前分配的clk_src(时钟源)资源未被正确释放,导致内存泄漏问题。
该漏洞的CVSS 3.1评分为5.5分,属于中等严重等级。其攻击向量为本地(AV:L),攻击者需要低权限(PR:L)即可触发,无需用户交互(UI:N)。漏洞的影响范围仅限于可用性(A:H),不会影响机密性(C:N)和完整性(I:N),这表明该漏洞主要导致系统资源耗尽而非数据泄露或篡改。
该漏洞最初由Linux内核社区发现并修复,修复方式是将错误的释放函数free替换为内核正确的释放函数kfree。这表明原始代码中使用了错误的内存释放API,在内核上下文中应当使用kfree而非通用的free函数。此类内存泄漏漏洞在长时间运行的系统中可能导致可用内存逐渐减少,最终引发系统性能下降或触发OOM(内存不足)killer机制,影响系统可用性。
该漏洞影响多个Linux内核稳定版本,已通过内核补丁6160216fd2c97107e8a9ab39863b056d677fcd85和a6e6ab9caeac96b277a3fe7da1dfa8f69a591759进行修复。
该漏洞存在于Linux内核的drm/amd显示驱动模块中,具体涉及clk_src(时钟源)资源的内存管理。漏洞的根本原因是在错误处理路径中,代码使用了错误的内存释放函数。
在AMD GPU驱动的初始化或配置过程中,系统会动态分配clk_src结构体用于管理GPU时钟资源。当函数执行过程中检测到某些错误条件(如硬件状态异常、资源分配失败等)时,会跳转到错误处理路径并返回NULL。然而,在返回之前,代码尝试使用free()函数释放clk_src内存,但free()是用户空间的C库函数,在内核空间中应当使用kfree()。
由于使用了错误的释放函数,clk_src内存实际上并未被释放,每次执行到该错误路径都会泄漏一块内存。攻击者可以通过反复触发该错误路径来持续消耗内核内存资源。在内核空间中,泄漏的内存无法被回收,长期累积将导致:
1. 系统可用内存逐渐减少
2. 内核内存碎片化
3. 最终触发OOM killer,导致系统不稳定
利用方式方面,攻击者需要本地低权限访问权限,通过编写特定的程序或利用现有工具反复触发包含clk_src分配的错误处理路径。由于该漏洞需要特定的内核模块加载和硬件环境(AMD GPU),实际利用门槛相对较高。