DF-5089 / manifest.json
{ "finding_id": "DF-5089", "verdict": "untested", "impact": "none", "confidence": "certain", "summary": "si_copy_dma discards the return values of radeon_sync_resv()/radeon_sync_rings() (si_dma.c:255-256); on sync failure (e.g. -EINVAL syncing to a ring disabled by a failed ib test) the DMA copy is emitted without cross-ring ordering, silently corrupting the migrated bo's GPU contents — SI twin of DF-4871", "kernel_refs": [ "sys/dev/drm/radeon/si_dma.c:255", "sys/dev/drm/radeon/si_dma.c:256", "sys/dev/drm/radeon/radeon_sync.c:153", "sys/dev/drm/radeon/radeon_ib.c:149" ], "artifacts": ["README.md", "VERDICT.md", "fix.diff", "env.txt", "run.log", "manifest.json", "verdict.json"], "reproduce": { "build": "n/a — kernel-internal GEM bo-migration path", "run": "on real SI hardware: unprivileged GEM client forcing bo migrations (eviction) while the DMA ring source of a pending resv fence was disabled by a prior failed ib test / GPU reset; verify copied bo contents against pre-move canonical contents", "expected": "without fix: copy committed despite radeon_sync_rings() returning -EINVAL, destination bo holds stale/partial data with a good fence; with fix.diff: copy path returns the error, ttm falls back to memcpy" } } |