DragonFlyBSD Kernel Audit
DF-2845 / manifest.json
← back to finding ↓ download raw
{
  "finding_id": "DF-2845",
  "verdict": "reproduced",
  "impact": "panic",
  "summary": "Unvalidated sbuf drain-callback return: silent unbounded heap overflow on production kernels; KASSERT panic on INVARIANTS kernels; blocked by one-line runtime check (fix validated).",
  "reproduce": {
    "build": "in-guest: cp df2845_test.c /usr/src/sys/kern/ + sys/conf/files entry + custom kernel config (INVARIANTS commented out) + make nativekernel KERNCONF=DF2845_NOINV -j6",
    "run": "boot custom kernel; sysctl debug.df2845_trigger=1",
    "expected": "unpatched/no-INVARIANTS: 'OVERFLOW CONFIRMED: 224 byte(s) written past the 32-byte heap allocation' with rc=0 s_error=0; unpatched/INVARIANTS: panic 'Bad drain amount 0 for sbuf'; patched: 'BLOCKED', rc=-1, s_error=88"
  },
  "kernel_refs": [
    "sys/kern/subr_sbuf.c:331",
    "sys/kern/subr_sbuf.c:336",
    "sys/kern/subr_sbuf.c:338",
    "sys/kern/subr_sbuf.c:349",
    "sys/kern/subr_sbuf.c:367",
    "sys/kern/subr_sbuf.c:379",
    "sys/kern/kern_sysctl.c:1616",
    "sys/sys/sbuf.h:81"
  ],
  "artifacts": [
    "df2845_test.c", "baddrain.c", "Makefile", "build.sh", "run.sh",
    "build.log", "run.log", "run.2.log", "panic.txt", "env.txt",
    "fix.diff", "verdict.json", "manifest.json"
  ]
}