CVE-2023-53654CVE-2023-53654是Linux内核中octeontx2-af(Marvell OCTEON TX2网络加速器)驱动的一个安全漏洞。该漏洞源于驱动在RVU(Risorse Virtuali Unit,虚拟资源单元)初始化过程中,未对CGX(Common Gigabit Ethernet eXtended)和LMAC(Logical MAC,逻辑MAC)块进行有效的边界校验。随着CN10K RPM和CN10KB RPM_USX等新型MAC硬件块的引入,LMAC块和CGX块在内存布局上变为非连续(noncontiguous),但旧版驱动仍然假设它们是连续排列的,并直接使用ID索引进行访问操作。当传入的ID值超出实际有效范围时,驱动会访问到无效的内存区域,从而触发内核空指针引用或越界访问,最终导致内核panic(内核崩溃)。该漏洞需要本地低权限用户触发,在系统启动或驱动初始化阶段即可被利用,可造成系统可用性完全丧失。CVSS评分为5.5分,属于中危级别,主要影响系统的可用性(Availability: High),对机密性和完整性无影响。
从技术层面分析,该漏洞的根本原因在于octeontx2-af驱动中cgx_lmac_read函数及其调用链缺少对CGX和LMAC块ID的有效性校验。
在原始实现中,RVU驱动在初始化阶段调用rvu_program_channels函数,该函数会通过CGX/LMAC的ID直接索引访问对应的硬件块结构体(pc : cgx_lmac_read+0x38/0x70,lr : rvu_program_channels+0x3f0/0x498)。然而,在CN10K系列硬件中,CGX和LMAC块的物理布局变为非连续分布,存在地址空洞(address hole)。当驱动使用超出有效范围的ID进行数组索引时,会访问到未初始化的内存或无效指针。
漏洞触发流程:
1. 系统启动时,octeontx2-af驱动加载并执行RVU初始化流程;
2. rvu_program_channels函数被调用,准备编程硬件通道;
3. 函数内部通过传入的cgx_id和lmac_id调用cgx_lmac_read;
4. cgx_lmac_read直接使用ID作为数组索引访问cgx->lmac_list[id];
5. 当ID对应的块不存在时,访问到NULL指针或无效内存;
6. 内核检测到非法访问,触发kernel panic。
修复方案是在访问CGX和LMAC之前添加边界检查(validation),确认ID对应的硬件块确实存在且已初始化。该漏洞利用条件为本地低权限(PR:L),无需用户交互(UI:N),攻击复杂度低(AC:L),但需要本地访问权限(AV:L)。