{
  "finding_id": "DF-3318",
  "title": "in6_update_ifa() accepts arbitrary ifra_dstaddr.sin6_len -> OOB heap read (unprivileged SIOCGLIFADDR kernel-pointer leak) + kernel stack overflow (SIOCDLIFADDR)",
  "verdict": "reproduced",
  "reproduced": 1,
  "impact": "leak",
  "confidence": "certain",
  "fix_status": "fixed",
  "reproduce": {
    "build": "cc -O -o setup setup.c && cc -O -o leak leak.c && cc -O -o delete delete.c",
    "run": "./setup gif0 200; su -m nobody -c './leak gif0'; ./delete gif0",
    "expected": "leak: dstaddr.sin6_len=200, kernel heap pointers at dstaddr[64..71] and dstaddr[120..127], identical across runs; delete: Fatal trap 12, ip=0x8:0x0, fp=0x0; patched kernel: setup EINVAL, everything else EADDRNOTAVAIL, no crash"
  },
  "kernel_refs": [
    "sys/netinet6/in6.c:901",
    "sys/netinet6/in6.c:1052-1067",
    "sys/netinet6/in6.c:1570-1572",
    "sys/netinet6/in6.c:1598-1602",
    "sys/netinet6/in6.c:490-499",
    "sys/kern/sys_generic.c:668-680",
    "sys/kern/sys_generic.c:730"
  ],
  "artifacts": [
    "setup.c", "leak.c", "delete.c",
    "build.sh", "run.sh",
    "build.log",
    "run.log", "run.2.log", "run.3.log", "leak_sample.txt",
    "delete.log", "panic.txt", "console-full.txt",
    "setup-run1.log", "leak-run-linklocal.log",
    "fix_run.log", "fix_build.log", "fix.diff",
    "env.txt", "README.md", "VERDICT.md", "manifest.json", "verdict.json"
  ]
}
