⬢ DragonFlyBSD Kernel Audit
DF-4265 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/drm/amd/amdgpu/amdgpu_cs.c
+++ b/sys/dev/drm/amd/amdgpu/amdgpu_cs.c
@@ -1513,15 +1513,22 @@
 			continue;
 
 		r = dma_fence_wait_timeout(fence, true, timeout);
-		dma_fence_put(fence);
-		if (r < 0)
+		if (r < 0) {
+			dma_fence_put(fence);
 			return r;
+		}
 
-		if (r == 0)
+		if (r == 0) {
+			dma_fence_put(fence);
 			break;
+		}
 
 		if (fence->error)
-			return fence->error;
+			r = fence->error;
+
+		dma_fence_put(fence);
+		if (r < 0)
+			return r;
 	}
 
 	memset(wait, 0, sizeof(*wait));