被标识为 CVE-2026-98432 的安全漏洞影响 Linux 内核处理 IPv4 TCP 握手请求的方式。该问题集中在内核如何管理 IP 选项数据的所有权和回收上。在标准的 TCP 握手过程中,内核创建一个轻量级的“请求套接字”(request socket)来存储初始连接状态。随着握手进展到完整的“子套接字”(child socket),内核会将请求套接字的 IP 选项(`ireq_opt`)指针转移到子套接字的选项(`inet_opt`)中,而不是复制该对象。这种设计选择意味着两个套接字对象共享相同的选项内存分配。
当针对同一连接的重传 SYN 数据包到达时,该漏洞表现为竞态条件。由于 Linux 网络处理高度并行,第二个 CPU 可能会在第一个 CPU 完成握手的同时处理这个重传的 SYN。第二个 CPU 进入 RCU(Read-Copy Update)读端临界区以构建 SYN-ACK 响应,并读取共享的 IP 选项。然而,如果子套接字在此窗口期间被销毁,内核原始的析构函数将使用标准的 `kfree()` 调用。与 RCU 感知的回收不同,`kfree()` 会立即使内存可用于重用。这造成了一种使用后释放场景,其中第二个 CPU 继续从可能已被重新分配给不同内核对象的内存中读取数据,可能导致系统崩溃、数据泄露或远程代码执行。

此图表解释了第二个 CPU 读取共享 IP 选项而第一个 CPU 处理套接字销毁时的特定竞态条件。
上游修复方案已合并为提交 `e3f33b0a1d89`,它将立即的 `kfree()` 替换为 `kfree_rcu()`。这确保了内存回收被延迟到 RCU 宽限期结束为止,从而保证所有当前持有选项对象引用的 CPU 都已完成其操作。虽然主要的漏洞影响 IPv4 子套接字路径,但请求套接字迁移(当启用 `net.ipv4.tcp_migrate_req=1` 时)中也存在相关问题。在这种情况下,内核克隆请求套接字,旧的请求及其克隆体共享相同的选项。该补丁通过在 `inet_sock_destruct()` 和 `tcp_v4_reqsk_destructor()` 中同时强制执行 RCU 感知的回收,解决了标准子套接字路径和迁移路径中的问题。

此图像提供了内核补丁背景下所述修复步骤的可视化工作流。