diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index 4b9f8b5c..2f9c1333 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -1276,7 +1276,14 @@ FileDescriptor V4L2VideoDevice::exportDmabufFd(unsigned int index,
 		return FileDescriptor();
 	}
 
-	return FileDescriptor(expbuf.fd);
+	FileDescriptor fd(expbuf.fd);
+	/*
+	 * FileDescriptor takes a duplicate of fd, so we must close the
+	 * original here, otherwise it will be left dangling.
+	 */
+	::close(expbuf.fd);
+
+	return fd;
 }
 
 /**
