diff --git a/src/libcamera/dma_buf_allocator.cpp b/src/libcamera/dma_buf_allocator.cpp
index a014c3b4263c..17a888efaa40 100644
--- a/src/libcamera/dma_buf_allocator.cpp
+++ b/src/libcamera/dma_buf_allocator.cpp
@@ -330,6 +330,11 @@ DmaSyncer::~DmaSyncer()
 
 void DmaSyncer::sync(uint64_t step)
 {
+	// DmaSyncer might be moved and left an empty SharedFD.
+	// Avoid syncing with an invalid file descriptor in this case.
+	if (!fd_.isValid())
+		return;
+
 	struct dma_buf_sync sync = {
 		.flags = flags_ | step
 	};
