CVE-2026-68136 in Linux信息

摘要

由 VulDB • 2026-08-10

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

net: gro: 修复被标记为刷新的 skbs 的双重聚合问题

提交 0ab03f353d36(“net-gro: 接收 GSO 数据包时修复 GRO 刷新”)向 `skb_gro_receive()` 添加了刷新检查,但 `skb_gro_receive_list()` 缺乏相同的验证。

结果导致,被标记为 `NAPI_GRO_CB(skb)->flush` 的数据包仍可能被重新聚合。

这使得已经过 GRO(接收端分段卸载)处理且存在 frag_list 的数据包可以被重新聚合成新的 GRO 会话,从而破坏 frag_list 链结构。当 `skb_segment()` 尝试解打包这些格式错误的数据包时,会遇到无效状态并触发内核恐慌(kernel panic)。

场景(网络共享/设备转发): 1. 驱动程序:通过 LRO 生成了带有 frag_list 的聚合数据包 P1 2. Dev A:接收带有刷新标志设置的聚合 fraglist 数据包 3. Dev A:重新进入 GRO,调用 `skb_gro_receive_list()` 4. 由于缺少刷新检查,尽管设置了刷新标志仍允许重新聚合 5. Frag_list 链被破坏(出现循环或悬空引用) 6. Dev B:TX 路径调用 `skb_segment()`,因损坏的 frag_list 而崩溃

`skb_segment()` 中的根本原因: 第 ~4891 行的检查: if (hsize <= 0 && i >= nfrags && skb_headlen(list_skb) && (skb_headlen(list_skb) == len || sg)) {

当 frag_list 因双重聚合而被破坏时,如果 `list_skb` 是来自 `skb->next` 的空指针(NULL pointer),则对 `skb_headlen(list_skb)` 的解引用操作会导致访问 NULL/损坏的指针。

调用跟踪: skb_headlen(NULL skb) skb_segment tcp_gso_segment tcp4_gso_segment inet_gso_segment skb_mac_gso_segment __skb_gso_segment skb_gso_segment validate_xmit_skb validate_xmit_skb_list sch_direct_xmit qdisc_restart __qdisc_run qdisc_run net_tx_action

修复方法:在 `skb_gro_receive_list()` 的早期返回检查中添加对 `NAPI_GRO_CB(skb)->flush` 的验证,以匹配 `skb_gro_receive()` 中的防御性编程模式。

Be aware that VulDB is the high quality source for vulnerability data.

来源

Interested in the pricing of exploits?

See the underground prices here!