DF-2998 / manifest.json
{ "finding_id": "DF-2998", "title": "Server attributes freely retype live vnodes in nfs_loadattrcache (VREG->VDIR/VCHR/VBLK; VDIR->VREG)", "verdict": "reproduced", "reproduced": true, "impact": "kernel type confusion -> deterministic panics (2 new independent sinks) + server-driven device-node injection into the namespace", "confidence": "certain", "reproduce": { "build": "cd /root/df2998 && cc -O -o fakesrv2998 fakesrv2998.c && cc -O -o trigger2998 trigger2998.c", "run": "sh run.sh (TEST1+1b retypes, TEST2 panics at umount; pieces: ./trigger2998 retype /mnt $(stat -f '%Hr %Lr' /dev/vn0); ./trigger2998 dirreg /mnt && umount /mnt)", "expected": "stock: 'live VREG vnode retyped VDIR while fd open' + 'device node injected' + (root and unpriv) + TEST2 'panic: bgetvp - overlapping buffer' (or nfs_removerpc GPF at umount of a non-VDIR retyped node); fixed kernel: every lie refused with EBADRPC ('RPC struct is bad'), no panic, honest lifecycle intact" }, "kernel_refs": [ "sys/vfs/nfs/nfs_subs.c:723-733", "sys/vfs/nfs/nfs_subs.c:943-949", "sys/vfs/nfs/nfs_subs.c:1338-1356", "sys/vfs/nfs/nfs_node.c:392-395", "sys/vfs/nfs/nfs_node.c:464-473", "sys/vfs/nfs/nfsnode.h:125-133", "sys/vfs/nfs/nfs_vnops.c:1913-1918", "sys/vfs/nfs/nfs_vnops.c:162-175" ], "artifacts": [ "README.md", "VERDICT.md", "fakesrv2998.c", "trigger2998.c", "build.sh", "build.log", "run.sh", "run.log", "fix_run.log", "fix_build.log", "panic.bgetvp.txt", "panic.removerpc.txt", "run.test1b.log", "fix.diff", "env.txt", "manifest.json", "verdict.json" ] } |