CVE-2026-23321Linux内核的MPTCP(多路径TCP)协议栈中存在一个逻辑缺陷,可能导致拒绝服务。该漏洞位于内核的路径管理(PM)组件,涉及对子流和信号端点的标记管理。当本地用户执行特定的操作序列时,会触发内核警告。具体场景包括:将MPTCP子流限制设置为0,创建同时带有“signal”和“subflow”标志的端点,从不同地址发起连接(发送ADD_ADDR但不建立子流),随后删除该端点。由于内核未能正确维护本地地址使用计数器,导致计数器异常归零,进而触发WARNING,可能导致系统崩溃或内核恐慌。
该漏洞位于Linux内核源码的`net/mptcp/pm_kernel.c`文件中,核心问题出在`__mark_subflow_endp_available`函数以及`mptcp_nl_remove_subflow_and_signal_addr`调用路径。漏洞原理在于MPTCP路径管理器在处理带有“signal”和“subflow”双标志端点时的状态跟踪不一致。正常情况下,端点创建时会增加`local_addr_used`计数。但在特定条件下,即子流限制(subflow limit)被设为0时,虽然“signal”标志允许发送ADD_ADDR通知,但“subflow”标志因限制无法创建实际子流,导致状态机混乱。当用户调用Netlink接口删除该端点时,内核尝试释放资源并减少`local_addr_used`计数,由于该计数在异常状态下已为0,触发了`WARNING: msk->pm.local_addr_used == 0`。在默认内核配置下,这类WARNING通常会导致系统进入不稳定状态或直接崩溃。攻击者需具备本地低权限即可利用此漏洞。