β¬’ DragonFlyBSD Kernel Audit
← triage Β· dashboard
DF-3309

ip6_getmoptions(): IPV6_MULTICAST_LOOP default echoes the hop-limit default instead of the loop default

Summary

The IPV6_MULTICAST_LOOP GET branch returns *loop = ip6_defmcasthlim when no options are attached, instead of IPV6_DEFAULT_MULTICAST_LOOP (copy-paste from the HOPS branch). The two sysctl-tunable defaults diverge whenever net.inet6.ip6.defmcasthlim != 1, making getsockopt(IPV6_MULTICAST_LOOP) report a loop setting the socket does not have. API correctness only (values coincide under default sysctls); trivial repro (sysctl defmcasthlim=5 then getsockopt returns 5). Fix: one-constant substitution. [VERIFIED pass2: reproduced - defmcasthlim 5 makes IPV6_MULTICAST_LOOP return 5 via copy-paste; F40FIX returns 1]

Discussion (0)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-3309 Β· 6 files
FileTypeDescriptionSize
README.md β€” 221 B ↓ raw
df3309.c β€” 702 B view raw
fix.diff β€” 375 B view raw
manifest.json β€” 379 B view raw
run.log β€” 496 B view raw
verdict.json β€” 1.4 KB view raw

DF-3309 evidence pack

What

IPV6_MULTICAST_LOOP GET echoes the hop-limit default

Verdict

status=reproduced impact=none confidence=certain

See VERDICT.md for the full narrative and fix.diff for the verified fix.

Fix verification

fixed

A/B complete: with defmcasthlim=5 the fixed kernel returns IPV6_MULTICAST_LOOP=1 (stock returned 5).

↓ fix.diffper-fix-DF-3309

Confirmed kernel references

Detail

Evidence (decisive lines)

VERDICT.md with path:line citations; run.log where a live demo exists; fix.diff

PoC changes

n/a - first probe already correct

Verified recommended fix

return IPV6_DEFAULT_MULTICAST_LOOP instead of ip6_defmcasthlim

Verdict

Reproduced on the stock INVARIANTS guest: after sysctl -w net.inet6.ip6.defmcasthlim=5, getsockopt(IPV6_MULTICAST_LOOP) on a fresh socket (no multicast options attached) returns 5; with the default sysctl it returns 1. The GET branch copies ip6_defmcasthlim instead of IPV6_DEFAULT_MULTICAST_LOOP (ip6_output.c:2511-2515) - copy-paste from the HOPS branch two cases above. API correctness only. Post-fix A/B on the F40FIX kernel: with defmcasthlim=5 the same getsockopt returns 1.