DF-3078 / manifest.json
{ "finding_id": "DF-3078", "manifest_version": 1, "title": "ffs_reload (MNT_RELOAD) adopts re-read superblock geometry without validation — heap OOB write (controlled), div-by-zero, heap OOB read to media", "file": "sys/vfs/ufs/ffs_vfsops.c", "verdict": "reproduced", "impact": "panic", "confidence": "certain", "reproduce": { "build": "in guest as root: cd /root/rt && sh build.sh (cc -o craft/dumpsb/reload)", "run": "sh run.sh <variant> variants: unchanged|cssize|fsize0|ncg|sbsize_leak|sbsize_fault", "expected": "baseline #0: fsize0 -> Fatal trap 18 idivl; ncg -> vm_fault stack-guard panic; sbsize_fault -> trap 12 supervisor-read in memmove; cssize -> reload RETURNS 0 with ~522KB heap smash (silent); sbsize_leak -> bytes past um_fs on the media. patched #1 (fix.diff): every crafted variant -> 'mount: Invalid argument', guest stays up; unchanged reload + RW mounts still work." }, "kernel_refs": [ "sys/vfs/ufs/ffs_vfsops.c:479", "sys/vfs/ufs/ffs_vfsops.c:484", "sys/vfs/ufs/ffs_vfsops.c:493", "sys/vfs/ufs/ffs_vfsops.c:495", "sys/vfs/ufs/ffs_vfsops.c:500", "sys/vfs/ufs/ffs_vfsops.c:504", "sys/vfs/ufs/ffs_vfsops.c:515", "sys/vfs/ufs/ffs_vfsops.c:517", "sys/vfs/ufs/ffs_vfsops.c:521", "sys/vfs/ufs/ffs_vfsops.c:526", "sys/vfs/ufs/ffs_vfsops.c:533", "sys/vfs/ufs/ffs_vfsops.c:536", "sys/vfs/ufs/ffs_vfsops.c:671", "sys/vfs/ufs/ffs_vfsops.c:680", "sys/vfs/ufs/ffs_vfsops.c:1292", "sys/vfs/ufs/ffs_vfsops.c:1295" ], "artifacts": [ "README.md", "VERDICT.md", "reload.c", "craft.c", "dumpsb.c", "setup.sh", "build.sh", "run.sh", "build.log", "run.log", "run.patched.log", "panic_idivl_fsize0.txt", "panic_maxcluster_ncg.txt", "panic_sbupdate_oob_read.txt", "env.txt", "fix.diff", "manifest.json", "verdict.json" ] } |