in6_ifdetach purges UDP moptions from udbinfo[0] only while the IPv4 twin loops all CPUs β latent purge gap that is complete today only by accident of udp6_attach()
Summary
in6_ifdetach_dispatch calls in6_pcbpurgeif0(&udbinfo[0]) whereas the IPv4 twin loops all CPUs. Phase V REFUTED current reachability: IPv6 UDP pcbs are ALWAYS on udbinfo[0] (udp6_attach hardcodes it; udp6_bind/connect never migrate). Guest A/B (pack): cpu0 and cpu1-labeled runs both purge cleanly (STALEIDX=0). Filed as Info hardening: if IPv6 UDP ever adopts per-CPU migration, the purge silently misses every non-zero-CPU pcb and resurrects the DF-3308 dangling-im6o/double-free class for UDP. Negative record + PoC pack kept. Fix: mirror the IPv4 twin's per-CPU loop.
Discussion (0)
PoC verification
Evidence pack
findings/poc/DF-3417 Β· 3 files| File | Type | Description | Size | |
|---|---|---|---|---|
| mship.c | β | 4.2 KB | view raw | |
| build.sh | β | 87 B | view raw | |
| build.log | β | 280 B | view raw |
Confirmed kernel references
Detail
Exploit chain
n/a - honestly refuted; hardening
Evidence (decisive lines)
['findings/poc/DF-3417/README.md', 'findings/poc/DF-3417/run.sh']
PoC changes
verdict.json reconstructed by the orchestrator (analysis-only Info finding, pack has README/PoC but no reviewer verdict.json).
Verified recommended fix
Loop over all CPUs calling in6_pcbpurgeif0(&udbinfo[cpu]) as in.c does.
Verdict
REFUTED as reachable today: IPv6 UDP pcbs are always on udbinfo[0] (udp6_attach hardcodes it; bind/connect never migrate), so the single-pcbinfo purge is complete - guest A/B (cpu0 vs cpu1-labeled runs) both purged cleanly (STALEIDX=0). Filed Info/latent: any future per-CPU udp6 migration resurrects the DF-3308 class for UDP. Fix: mirror the IPv4 twin's per-CPU loop.
No comments yet.