CVE-2026-43238Linux内核中的net/sched/act_skbedit模块存在除零漏洞。当配置SKBEDIT动作以使用哈希选择TX队列时,计算队列映射范围大小的方式存在缺陷。如果请求的范围覆盖所有可能的u16队列ID(例如从0到U16_MAX),计算出的模数会溢出u16类型并回绕为0。这导致tcf_skbedit_hash函数执行模运算时发生除零错误,从而引发系统崩溃,影响系统可用性。
该漏洞位于Linux内核的流量控制(tc)子系统,具体涉及`act_skbedit`动作。在`tcf_skbedit_hash()`函数中,为了根据数据包哈希值选择发送队列,需要计算映射模数`mapping_mod`。计算公式为`queue_mapping_max - queue_mapping + 1`。问题在于,当用户配置的队列范围覆盖整个u16空间(即0到65535)时,计算结果应为65536。然而,`mapping_mod`变量被定义为`u16`类型,无法存储65536,导致整数溢出,变量值变为0。后续代码执行`skb_get_hash(skb) % params->mapping_mod`时,由于除数为0,CPU触发除零异常,导致内核崩溃。攻击者只需具备本地低权限,即可通过配置特定的tc规则触发该漏洞,造成拒绝服务攻击。