CVE-2026-89487 in Linux信息

摘要

由 VulDB • 2026-09-12

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

openvswitch: 仅对即将丢弃的数据包调用 skb_tx_error()

queue_userspace_packet() 借用数据包 sk_buff (skb)——它只是将数据包复制到私有 netlink 消息(user_skb)中,并不拥有该数据包的引用;在返回后,do_execute_actions() 会继续通过流剩余的操作转发该数据包。然而,其错误路径仍然调用 skb_tx_error(skb),后者通过 skb_zcopy_clear() 执行 skb_shinfo(skb)->flags &= ~SKBFL_ALL_ZEROCOPY,从而从活跃的数据包(skb)中移除 SKBFL_SHARED_FRAG 标志(skb_tx_error() 的内核文档说明“此后必须释放 skb”)。

对于携带页面缓存碎片(page-cache frags)的 MSG_ZEROCOPY sk_buff,SKBFL_SHARED_FRAG 是 esp_input() 在就地执行 AEAD 加密前调用 skb_cow_data() 的关键条件;一旦该标志被移除,后续通过 UDP 封装的本机 ESP 交付将在发送方不拥有的页面上进行就地解密——这构成了一个非特权页面缓存写入原语(即“Fragnesia”攻击手段)。

do_execute_actions() 忽略了 output_userspace() 的返回值,因此任何在 USERSPACE upcall 失败后执行的操作都会继承已被剥离标志的数据包。

将 skb_tx_error() 调用移至流未匹配时的丢弃路径——即在 ovs_dp_process_packet() 的 switch(error) “默认”分支中、kfree_skb() 之前进行调用。

该调用自 commit 36d5fe6a0007(“core, nfqueue, openvswitch: Orphan frags in skb_zerocopy and handle errors”)以来一直存在,但在 esp_input() 开始依赖 SKBFL_SHARED_FRAG 来限制就地解密之前,它并无害处;只有在那之后,在仍在转发的数据包上剥离该标志才成为页面缓存写入原语。

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

来源

Might our Artificial Intelligence support you?

Check our Alexa App!