五个 Linux 内核 CVE:io_uring 巨型 folio 移位溢出、VLAN 帧 transport_header 未初始化、ESP-in-TCP NULL 设备解引用
信源:linux-cve-announce 邮件列表 与 cve.report。以下均为 Linux 内核 CVE,均已修复并有 backport 版本。
CVE-2026-80810:io_uring/rsrc: fix folio size overflow in io_vec_fill_bvec()
imu->folio_shift 是 unsigned int,来自 backing folio 的 folio_shift(),64 位内核上可能 ≥32。对 int 1 做这么大的移位是未定义行为;x86/arm64 上移位量取模 32,于是 34 变成 2,16G folio 被当成 4 字节。
结果是 segment 估算与填充循环不一致。1M iovec 在 16G folio 上被算作 2 段,而 io_vec_fill_bvec() 按 4 字节步长遍历同一 iovec,向 res_bvec[bvec_idx] 写入约 25 万次,越界写到数组之外;src_bvec 每次迭代也前进,imu->bvec 同时被越界读。
触发条件:需要 shift ≥32 的 folio,即巨型 hugetlb 页。arm64 + 64K 页时为 16G(CONT_PMD_SHIFT=34),powerpc 类似。x86_64 最高 1G(shift 30),仍在 int 内,不受影响。
引入于 6.15(commit 9ef4cbbcb4ac);修复于 6.18.47(commit 45c945107e00)、7.1.11、7.2.1、7.3-rc1。
CVE-2026-80906:net: packet: fix wrong transport_header when sending VLAN-tagged frame
packet_parse_headers() 处理 VLAN 帧时先调用 skb_set_network_header() 把 network_header 推进到内层协议头,再调用 skb_probe_transport_header(),而 skb->protocol 仍是外层 VLAN EtherType(ETH_P_8021Q),nhoff 已越过 VLAN 标签。
__skb_flow_dissect() 命中 ETH_P_8021Q 分支时在 nhoff 处读 vlan_hdr,但该偏移其实是内层协议头(如 IP),被误读成 VLAN 头,解析出垃圾 EtherType,dissector 返回 false,skb_probe_transport_header() 最终没设置 transport_header,留下未初始化哨兵值(~0U)。
修复方式是把 skb_probe_transport_header() 移到 skb_set_network_header() 之前。
引入于 5.10.163 / 5.15.87 / 5.19 等;修复于 5.10.266、5.15.217、6.1.184、6.6.153、6.12.105、6.18.46、7.1.10、7.2。涉及文件 net/packet/af_packet.c。
CVE-2026-80846:xfrm: drop ESP-in-TCP packets with no ingress device
ESP-in-TCP 的 handle_esp() 在把包交给 XFRM input 路径前,从保存的 skb_iif 解析 skb->dev。排队的 TCP 数据可能在原 ingress 设备被移除后才被处理(如 veth 或 net namespace 拆除期间),此时 dev_get_by_index_rcu() 返回 NULL。XFRM 的 IPv4/IPv6 input 路径都假定 skb->dev 有效来构建路由查找,于是排队数据可能解引用 NULL 设备。
修复方式:保存的 ingress 设备无法再解析时丢弃该包。
引入于 5.6;修复于 5.10.269、5.15.220、6.1.187、6.6.156、6.12.108、6.18.49、7.1.13、7.2.3、7.3-rc1。涉及文件 net/xfrm/espintcp.c。
CVE-2026-80924:crypto: krb5 — use kfree_sensitive() for derived key buffers
(2026-09-09 发布)
crypto_krb5_prepare_encryption() 和 crypto_krb5_prepare_checksum() 用普通 kfree() 释放存放新派生密钥的缓冲区,把密钥材料留在已释放的 slab 对象里。
影响 6.15;修复于 6.18.49、7.1.13、7.2.3、7.3-rc1。
CVE-2026-80921:KVM: s390: vsie: zero stale crypto bits
(2026-09-09 发布)
从 format0 apcb(crycb 0 或 1)shadow crypto 访问位时,bits 64..255 保留 vsie 页里 crycb/apcb 的旧值,可能让嵌套 guest 访问已不可用的设备。修复为把剩余位清零。
影响 4.20;修复于 5.10.269、5.15.220、6.1.187、6.6.156、6.12.108、6.18.49、7.1.13、7.2.3、7.3-rc1。
升级建议
内核 CVE 团队建议:升级到最新 stable 内核版本,而不是单独 cherry-pick 某个 commit(不推荐也不支持)。