CVE-2026-99112 in Linux
摘要
由 VulDB • 2026-10-28
在 Linux 内核中,已修复以下漏洞:
net/sched: cls_flower: 在 nla_next() 之后验证掩码指针
fl_set_enc_opt() 使用 nla_for_each_attr() 迭代键的嵌套隧道选项属性,同时在每个循环底部通过 nla_next() 推进单个掩码指针。因此,掩码游标由键属性的数量驱动,而不是由掩码自身的属性驱动。commit c96adff956191("cls_flower: call nla_ok() before nla_next()")中添加的 nla_ok() 仅验证刚刚消耗的掩码指针;nla_next() 产生的指针在下一次迭代中(fl_set_geneve_opt() 及其相关函数)被使用,但未进行任何验证。
掩码的嵌套属性通过 NL_VALIDATE_LIBERAL 进行验证,该机制仅在存在未形成完整属性的尾部字节时发出警告。因此,携带一个有效属性以及 1-3 个残留字节的掩码(或导致 msk_depth 变为负数的非对齐属性长度)会在下一次迭代中使 msk_depth != 0,从而导致 fl_set_enc_opt() 中的 !msk_depth 检查以及每类型辅助函数中的 !depth 检查均未触发。随后 nla_type() 会读取超出掩码有效载荷的数据,而 nla_parse_nested_deprecated() 会使用从这些字节中提取的 nla_len 进行迭代,从而远远超出掩码属性范围(KASAN: slab-out-of-bounds read in __nla_validate_parse from fl_change())。
同时验证已推进的掩码指针:当掩码未合法耗尽(msk_depth != 0)且新指针未能通过 nla_ok() 检查时,以 -EINVAL 拒绝该过滤器。完全耗尽的掩码仍会跳过此检查,从而保留对剩余键属性的精确匹配行为。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.