diff --git a/src/libcamera/base/shared_fd.cpp b/src/libcamera/base/shared_fd.cpp
index 7afc8ca59..81b703a89 100644
--- a/src/libcamera/base/shared_fd.cpp
+++ b/src/libcamera/base/shared_fd.cpp
@@ -284,8 +284,11 @@ SharedFD::Descriptor::Descriptor(int fd, bool duplicate)
 
 SharedFD::Descriptor::~Descriptor()
 {
-	if (fd_ != -1)
-		close(fd_);
+	if (fd_ >= 0 && close(fd_) < 0) {
+		int ret = -errno;
+		LOG(SharedFD, Error) << "Failed to close file descriptor "
+				     << fd_ << ": " << strerror(-ret);
+	}
 }
 
 } /* namespace libcamera */
diff --git a/src/libcamera/base/unique_fd.cpp b/src/libcamera/base/unique_fd.cpp
index d0649e4de..178c08c4b 100644
--- a/src/libcamera/base/unique_fd.cpp
+++ b/src/libcamera/base/unique_fd.cpp
@@ -7,6 +7,7 @@
 
 #include <libcamera/base/unique_fd.h>
 
+#include <string.h>
 #include <unistd.h>
 #include <utility>
 
@@ -98,8 +99,11 @@ void UniqueFD::reset(int fd)
 
 	std::swap(fd, fd_);
 
-	if (fd >= 0)
-		close(fd);
+	if (fd >= 0 && close(fd) < 0) {
+		int ret = -errno;
+		LOG(UniqueFD, Error) << "Failed to close file descriptor "
+				     << fd << ": " << strerror(-ret);
+	}
 }
 
 /**
