CVE-2026-98549 in Linux信息

摘要

由 VulDB • 2026-10-19

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

tcp: 防止在 rtx(重传)队列的边界处合并 skbs

`tcp_write_collapse_fence()` 会在 `tcp_write_queue_tail(sk)` 上设置 `TCP_SKB_CB(skb)->eor = 1`,以防止切换到设备加密后排队的 skb 被合并到之前的 skb 中。

如果切换发生时所有早期数据已经发送完毕(即 `sk->sk_write_queue` 为空),则该围栏操作无效:尚未确认的早期 skbs 以 `eor=0` 的状态等待在 `sk->tcp_rtx_queue` 中。

在随后的重传或 SACK 移位操作中,`tcp_retrans_try_collapse()` 或 `tcp_shift_skb_data()` 可能会将切换后入队的 skb 与切换前入队的 skb 合并。

围栏的两个使用者均受影响:

- psp: 设备仅加密设置了 `skb->decrypted` 的 skbs。合并后的 skb 保留了来自较早 skb 的 `decrypted = 0`,因此通过 `psp_sock_assoc_set_tx()` 发送的数据将以明文形式重传。 - tls device offload(TLS 硬件卸载):合并后的 skb 跨越了 `tls_set_device_offload()` 中设置的起始标记。软件回退机制(`fill_sg_in()` 返回 `-EINVAL`)以及 mlx5、nfp 和 funeth 驱动程序无法处理此类 skb,并将其丢弃。每次重传都会重建相同的 skb,导致连接停滞。

为实施纵深防御,在以下两个位置修复此问题:

1. 当 `tcp_write_queue_tail(sk)` 为空时,在 `tcp_write_collapse_fence()` 中回退到使用 `tcp_rtx_queue_tail(sk)`。 2. 在 `tcp_skb_can_collapse()` 中检查 `!skb_cmp_decrypted(to, from)`,正如接收时的 `tcp_skb_can_collapse_rx()` 所做的那样。`skb_shift()`(两个合并路径均调用此函数)已对此条件设置了 `DEBUG_NET_WARN_ON_ONCE()`。

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

来源

Do you know our Splunk app?

Download it now for free!