DF-2644 / manifest.json
{ "finding_id": "DF-2644", "title": "hammer2_xop_inode_flush NULL-deref of error'd PFS-root chain during sync (kernel panics on media read failure instead of returning EIO)", "verdict": "reproduced", "impact": "panic", "reproduce": { "build": "kernel A: cd /usr/src && patch -p1 < inject.diff && make -j6 nativekernel KERNCONF=X86_64_GENERIC && make installkernel KERNCONF=X86_64_GENERIC; kernel B: additionally patch -p1 < fix.diff and rebuild", "run": "sh run_df2644_inj.sh (mount hammer2 on vn; mkdir+touch; sysctl vfs.hammer2.df2644_fail_inode_read=16; sync)", "expected": "kernel A: 'hammer2: chain error during flush' then Fatal trap 12, fault VA 0x200, Stopped at hammer2_xop_inode_flush+0x39c (repe movsq = the blockset copy at hammer2_flush.c:1336-1337). kernel B: same error messages, NO fault at the site (residual later panic is the unrelated pre-existing chain.c:3112 assert)." }, "kernel_refs": [ "sys/vfs/hammer2/hammer2_flush.c:1334-1338", "sys/vfs/hammer2/hammer2_flush.c:1319-1331", "sys/vfs/hammer2/hammer2_flush.c:671-679", "sys/vfs/hammer2/hammer2_chain.c:998-1009" ], "artifacts": [ "README.md", "VERDICT.md", "verdict.json", "manifest.json", "run_df2644_inj.sh", "validate_fix_df2644.sh", "inject.diff", "fix.diff", "build_kernelA.sh", "build_kernelA2.sh", "build_kernelB.sh", "panic.txt", "fix_run.log", "fix_run_partial_3112.txt", "code_hashes.txt" ] } |