# DF-4684 — amdgpu_fence_wait_empty dead `dma_fence_get_rcu` bail (Low, hardening)

* **File:** `sys/dev/drm/amd/amdgpu/amdgpu_fence.c:295-316` (reader),
  `:244-265` (writer), `:631-649` (release/free).
* **Class:** lockless fence-get under no-op RCU (DF-4510 family, weakened
  instance) — dead bail path + use of an already-released fence; double-free
  tail empirically blocked by the port's `refcount_inc` saturation.
* **Trigger on the audit guest:** none needed for the primitive —
  `df4684.ko` replays the exact code path with the port's own primitives.

## Reproduce

```sh
# push df4684.c + Makefile to the guest (guest: 6.5-DEVELOPMENT, /usr/src present)
# build:
cd /root/poc/DF-4684 && make -m /usr/share/mk KMODDIR=$PWD   # -> df4684.ko
# baseline (stock headers; drm.ko of the running kernel):
kldload drm
kldload ./df4684.ko
sysctl kern.df4684_run=1      # then: dmesg | tail
# fixed header A/B:
#   patch /usr/src/sys/dev/drm/include/linux/dma-fence.h per fix.diff,
#   rm -f df4684.o df4684.ko && make ... && kldunload df4684; kldload ./df4684.ko
#   sysctl kern.df4684_run=1  # reader bails at :307, single free
```

## Expected

Baseline `run.log`: `refcount resurrected to 3221225472` (0xC0000000
REFCOUNT_SATURATED), `RESULT: releases=1 frees=1` — the reader used the dead
fence and the double-free tail was blocked by saturation.
Fixed `run.fixed.log`: `dma_fence_get_rcu(...) = 0` →
`get_rcu refused the dead fence (FIXED header)`.

See `VERDICT.md` for the full line-accurate narrative and `fix.diff`.
`panic.txt`-style artifacts are not applicable (no crash by design);
DF-4685 (same module, mode 2) carries the panic evidence.
