DF-5033 / manifest.json
{ "finding_id": "DF-5033", "title": "UAF/OOB-read race in amdgpu_bo_list_get(): DragonFly idr_find() is lockless while idr_grow() kfree()s the node array synchronously (Linux RCU-safe-idr assumption does not hold)", "verdict": "inconclusive", "impact": "none", "reproduced": false, "confidence": "certain", "reproduce": { "build": "sh build.sh", "run": "sh run.sh", "expected": "oracle (baseline) exits 1 with both V1 (preemption-in-window) and V2 (load-reorder) reporting reads of the freed idr_nodes[] array returning poisoned 0xDDDDDDDDDDDDDDDD as the data pointer handed to kref_get_unless_zero; oracle_fixed exits 0 with both variants clean; idr_race/idr_race_fixed complete 400 grow phases (1600 grow kfree events) with hits=0 (window is ~2 cycles; natural catch needs preemption in window or the reorder variant, which the oracle forces)" }, "kernel_refs": [ "sys/dev/drm/amd/amdgpu/amdgpu_bo_list.c:167", "sys/dev/drm/amd/amdgpu/amdgpu_bo_list.c:170", "sys/dev/drm/amd/amdgpu/amdgpu_bo_list.c:283", "sys/dev/drm/amd/amdgpu/amdgpu_cs.c:591", "sys/libkern/linux_idr.c:516", "sys/libkern/linux_idr.c:454", "sys/libkern/linux_idr.c:458", "sys/libkern/linux_idr.c:358", "sys/dev/drm/linux_rcu.c:187", "sys/dev/drm/amd/amdgpu/amdgpu_kms.c:1007" ], "artifacts": [ "README.md", "VERDICT.md", "gen_core.py", "idr_test_core.c", "harness_prelude.h", "inc/sys/idr.h", "idr_race.c", "oracle.c", "build.sh", "run.sh", "build.log", "oracle_baseline.log", "oracle_fixed.log", "race_baseline.log", "race_fixed.log", "env.txt", "fix.diff", "verdict.json", "manifest.json" ] } |