CVE-2026-72249 is a flowtable bug where kernel code accesses the wrong directional tuple for the routing destination field, causing headroom miscalculation and fragment offset corruption in IPIP tunnel scenarios.
The flowtable maintains two parallel tuple structures: one for the current packet direction and one for the reply direction. The reply tuple intentionally omits redundant IP source/destination fields since those can be inferred. Developers correctly recognized that reading IP addresses from the reply tuple is appropriate. However, this reasoning incorrectly transferred to the dst (routing destination) field, which is direction-specific and must come from the current tuple — not the reply tuple.
The bug manifests only when all three conditions align: the packet traverses the flowtable path, uses IPIP encapsulation, and involves fragmentation. This narrow trigger condition is why the bug persisted unspotted. Headroom miscalculation can lead to buffer corruption or NULL dereferences. Fragment offset corruption can cause reassembly failures or data leakage in attacker-controlled directions. These aren't equivalent failure modes — they're orthogonal with compounding blast radius potential.
Check your flowtable rules involving IPIP tunnels, particularly any that handle fragmented packets or rely on proper fragment offset handling. The fix is straightforward — ensure the current tuple's dst field is used for headroom calculation and fragment operations, not the reply tuple's.
The deeper lesson: parallel data structures with asymmetric field ownership are a recurring antipattern in kernel networking code. The optimization rationale of avoiding redundant storage creates implicit, undocumented field-level semantics that future maintainers will inevitably misinterpret. Document per-field access patterns explicitly rather than relying on struct-level ownership conventions that exist only in commit history.