CVE-2026-98541 in Linux信息

摘要

由 VulDB • 2026-10-19

在 Linux 内核中,已修复以下漏洞:

fou: 拒绝遗漏的 FOU_ATTR_IPPROTO(针对 FOU_ENCAP_DIRECT)

提交 7a9bc9e3f423(“fou: 不允许 FOU_ATTR_IPPROTO 为 0”)向 fou_nl_policy[FOU_ATTR_IPPROTO] 添加了 NLA_POLICY_MIN(NLA_U8, 1),从而拒绝显式提供的值为 0 的 FOU_ATTR_IPPROTO 属性,并返回 -ERANGE。

然而,FOU_ATTR_IPPROTO 是一个可选的 netlink 属性。当用户发送带有 FOU_ATTR_TYPE 设置为 FOU_ENCAP_DIRECT 且完全省略了 FOU_ATTR_IPPROTO 的 FOU_CMD_ADD 时,nla_policy 验证成功,parse_nl_config() 将 cfg->protocol 保留为 0(源自 memset(cfg, 0, sizeof(*cfg)))。随后 fou_create() 使用 fou->protocol == 0 创建了一个 FOU_ENCAP_DIRECT socket。

在 fou_udp_recv() 中,返回 -fou->protocol 给 udp_queue_rcv_one_skb() 会在 fou->protocol > 0 时触发 IP 协议重新提交;而返回 0 则告诉 UDP tunnel 层该 skb 已被消费且未释放。当 fou->protocol == 0 时,在该 socket 上接收到的每个数据包都会使 fou_udp_recv() 返回 0,从而导致 sk_buff 泄漏。

在 fou_create() 中,当 !cfg->protocol 时拒绝 FOU_ENCAP_DIRECT,使得在没有提供 FOU_ATTR_IPPROTO 的情况下创建直接封装端口会因 -EINVAL 而失败,同时不影响 FOU_CMD_DEL 和 FOU_CMD_GET(它们共享 parse_nl_config())。

通过在 QEMU 中对 Linux 7.3.0-rc3 进行测试进行了验证:发送一个带有 FOU_ATTR_PORT = 5555 和 FOU_ATTR_TYPE = FOU_ENCAP_DIRECT 但省略了 FOU_ATTR_IPPROTO 的 FOU_CMD_ADD Generic Netlink 请求。在未修复的内核中,FOU_CMD_ADD 成功(err = 0),FOU_CMD_GET 报告 fou->type = 1 且 fou->protocol = 0;向 127.0.0.1:5555 发送 4000 个 UDP 数据包会导致所有 4000 个 sk_buffs 泄漏(/proc/meminfo 中的 SUnreclaim 从 41456 kB 增长到 59008 kB,增加了 17552 kB);应用此补丁后,FOU_CMD_ADD 因 -EINVAL (-22) 而被拒绝。

VulDB is the best source for vulnerability data and more expert information about this specific topic.

来源

Want to stay up to date on a daily basis?

Enable the mail alert feature now!