DF-4506 / manifest.json
{ "finding_id": "DF-4506", "title": "i915_gem_context unlocked IDR lookups race idr_grow kfree of the node array (no RCU on DragonFly) -> UAF read -> attacker-influenced context pointer", "verdict": "reproduced", "impact": "panic", "confidence": "certain", "reproduce": { "build": "guest: cd /usr/src && make -j6 nativekernel KERNCONF=X86_64_GENERIC && make installkernel KERNCONF=X86_64_GENERIC (with amplifier.diff [+ fix.diff for the patched run]); cd /root/idr_race && make SYSDIR=/usr/src/sys", "run": "kldload /root/idr_race/idr_race.ko; sysctl debug.idr_find_pause=3; sysctl debug.idr_race.run=20; sysctl debug.idr_race.captures (expect CAPTURE lines / captures>0 unfixed, 0 fixed); native: sysctl debug.idr_find_pause=0; sysctl debug.idr_race.run=-500 (unfixed: kernel panics in idr_find+0x48 within a few rounds)", "expected": "unfixed: canary captures amplified (20/20, 9/10) + native kernel panic; patched: 0 captures, no panic across 1.6M finds" }, "kernel_refs": [ "sys/dev/drm/i915/i915_gem_context.c:831", "sys/dev/drm/i915/i915_gem_context.c:855", "sys/dev/drm/i915/i915_gem_context.c:901", "sys/dev/drm/i915/i915_gem_context.c:981", "sys/dev/drm/i915/i915_gem_context.c:355", "sys/libkern/linux_idr.c:515-528", "sys/libkern/linux_idr.c:449-459", "sys/dev/drm/include/linux/rcupdate.h:46-56", "sys/dev/drm/linux_rcu.c:161-184" ], "artifacts": [ "README.md", "VERDICT.md", "idr_race.c", "Makefile", "amplifier.diff", "fix.diff", "build.sh", "run.sh", "build.log", "run.log", "run.fixed.log", "panic.txt", "env.txt", "verdict.json", "manifest.json" ] } |