⬢ DragonFlyBSD Kernel Audit
DF-3527 / manifest.json
← back to finding ↓ download raw
{
  "finding_id": "DF-3527",
  "title": "ng_iface (v1) NGM_IFACE_POINT2POINT/BROADCAST early return (EBUSY) leaks the control message (unbounded M_NETGRAPH kernel heap leak)",
  "verdict": "reproduced",
  "impact": "leak",
  "confidence": "certain",
  "severity": "Low",
  "reproduce": {
    "build": "in guest: cc -O2 -Wall -o /tmp/df3527_leak /tmp/df3527_leak.c ; module prerequisites: apply findings/poc/DF-3485/fix.diff + findings/poc/DF-3486/fix.diff to /usr/src, cd sys/netgraph/iface && make, kldload ng_socket + ./ng_iface.ko",
    "run": "ngctl mkpeer . iface inet inet; sleep 2; ifconfig ng0 up; sh leak_trigger.sh",
    "expected": "leak run: 2048/2048 sendto return EBUSY and vmstat -m netgraph grows by ~2048 InUse / ~34MB+ MemUse per run, accumulating across runs and never returning; control run (GET_IFNAME): zero growth. On the fixed module: EBUSY still returned, zero growth."
  },
  "kernel_refs": [
    "sys/netgraph/iface/ng_iface.c:660",
    "sys/netgraph/iface/ng_iface.c:666",
    "sys/netgraph/iface/ng_iface.c:732",
    "sys/netgraph/netgraph/ng_base.c:1176",
    "sys/netgraph/netgraph/ng_base.c:1186",
    "sys/netgraph/socket/ng_socket.c:253",
    "sys/netgraph/socket/ng_socket.c:256",
    "sys/netgraph/socket/ng_socket.c:172"
  ],
  "artifacts": [
    "README.md",
    "VERDICT.md",
    "leak.c",
    "leak_trigger.sh",
    "build.sh",
    "run.sh",
    "build.log",
    "run.log",
    "run.baseline.log",
    "run.2.log",
    "fix.diff",
    "fix_build.log",
    "fix_run.log",
    "panic.iface_residual_df3486.txt",
    "mppc_loadcheck.log",
    "env.txt",
    "manifest.json",
    "verdict.json"
  ]
}