diff --git a/src/libcamera/ipa_data_serializer.cpp b/src/libcamera/ipa_data_serializer.cpp
index fb941e6b..2a527d5d 100644
--- a/src/libcamera/ipa_data_serializer.cpp
+++ b/src/libcamera/ipa_data_serializer.cpp
@@ -8,6 +8,7 @@
 #include "libcamera/internal/ipa_data_serializer.h"
 
 #include <libcamera/base/log.h>
+#include <unistd.h>
 
 /**
  * \file ipa_data_serializer.h
@@ -547,7 +548,14 @@ FileDescriptor IPADataSerializer<FileDescriptor>::deserialize(std::vector<uint8_
 
 	ASSERT(!(valid && std::distance(fdsBegin, fdsEnd) < 1));
 
-	return valid ? FileDescriptor(*fdsBegin) : FileDescriptor();
+	int tmpfd = valid ? *fdsBegin : -1;
+	FileDescriptor fd = FileDescriptor(tmpfd);
+	if (valid && tmpfd != -1) {
+		LOG(IPADataSerializer, Error) << "We probably leaked an fd";
+		close(tmpfd);
+	}
+
+	return fd;
 }
 
 template<>
