DF-3527 / manifest.json
{ "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" ] } |