CVE-2026-23438Linux内核中的mvpp2驱动程序存在一个安全漏洞,该漏洞源于在缓冲区切换过程中对流控制更新缺乏必要的保护。具体而言,`mvpp2_bm_switch_buffers`函数无条件调用`mvpp2_bm_pool_update_priv_fc`,该函数访问`priv->cm3_base`时未检查空指针。如果设备树中缺少CM3 SRAM资源,该指针将为NULL。任何触发缓冲区切换的操作(如MTU变更)都将导致内核空指针解引用错误,进而引发系统崩溃。
该漏洞发生在Linux内核的网络驱动`mvpp2`中,主要涉及缓冲区管理逻辑。问题代码位于`mvpp2_bm_switch_buffers`函数,该函数负责在per-cpu和共享缓冲池模式之间切换。在此过程中,它无条件调用了`mvpp2_bm_pool_update_priv_fc`来更新流控制寄存器。该更新函数通过`mvpp2_cm3_read`和`mvpp2_cm3_write`访问硬件寄存器,这两个函数直接解引用`priv->cm3_base`指针。
然而,当设备树(DTS)中未包含CM3 SRAM资源时(即缺少第三个reg条目),`priv->cm3_base`保持为NULL,且`priv->global_tx_fc`标志为false。驱动程序中的其他流控制调用点都正确地使用了`global_tx_fc`或`tx_fc`标志来守卫硬件访问,唯独`mvpp2_bm_switch_buffers`遗漏了此检查。因此,当具有低权限的本地用户执行特定操作(如更改MTU大小超过巨型帧阈值)触发该路径时,内核将尝试读取地址0x0,导致空指针解引用异常,造成系统崩溃或拒绝服务。