diff --git a/image_verify.cpp b/image_verify.cpp
index 9551e4e..2b20340 100644
--- a/image_verify.cpp
+++ b/image_verify.cpp
@@ -18,6 +18,7 @@
 #include <cassert>
 #include <fstream>
 #include <set>
+#include <system_error>
 
 namespace phosphor
 {
@@ -57,9 +58,11 @@
     AvailableKeyTypes keyTypes{};
 
     // Find the path of all the files
-    if (!fs::is_directory(signedConfPath))
+    std::error_code ec;
+    if (!fs::is_directory(signedConfPath, ec))
     {
-        error("Signed configuration path not found in the system");
+        error("Signed configuration path not found in the system: {ERROR_MSG}",
+              "ERROR_MSG", ec.message());
         elog<InternalFailure>();
     }
 
@@ -129,7 +132,9 @@
     fs::path publicKeyFile(imageDirPath / PUBLICKEY_FILE_NAME);
 
     ret = verifyFile(pkeyFullFile, pkeyFullFileSig, publicKeyFile, hashType);
-    fs::remove(tmpFullFile);
+
+    std::error_code ec;
+    fs::remove(tmpFullFile, ec);
 #endif
 
     return ret;
@@ -186,7 +191,8 @@
             fs::path file(imageDirPath);
             file /= optionalImage;
 
-            if (fs::exists(file))
+            std::error_code ec;
+            if (fs::exists(file, ec))
             {
                 optionalFilesFound = true;
                 // Build Signature File name
@@ -297,10 +303,11 @@
 {
 
     // Check existence of the files in the system.
-    if (!(fs::exists(file) && fs::exists(sigFile)))
+    std::error_code ec;
+    if (!(fs::exists(file, ec) && fs::exists(sigFile, ec)))
     {
-        error("Failed to find the Data or signature file {PATH}.", "PATH",
-              file);
+        error("Failed to find the Data or signature file {PATH}: {ERROR_MSG}",
+              "PATH", file, "ERROR_MSG", ec.message());
         elog<InternalFailure>();
     }
 
@@ -338,7 +345,7 @@
     }
 
     // Hash the data file and update the verification context
-    auto size = fs::file_size(file);
+    auto size = fs::file_size(file, ec);
     auto dataPtr = mapFile(file, size);
 
     result = EVP_DigestVerifyUpdate(rsaVerifyCtx.get(), dataPtr(), size);
@@ -350,7 +357,7 @@
     }
 
     // Verify the data with signature.
-    size = fs::file_size(sigFile);
+    size = fs::file_size(sigFile, ec);
     auto signature = mapFile(sigFile, size);
 
     result = EVP_DigestVerifyFinal(
@@ -376,7 +383,8 @@
 
 inline EVP_PKEY_Ptr Signature::createPublicRSA(const fs::path& publicKey)
 {
-    auto size = fs::file_size(publicKey);
+    std::error_code ec;
+    auto size = fs::file_size(publicKey, ec);
 
     // Read public key file
     auto data = mapFile(publicKey, size);
@@ -414,7 +422,8 @@
         fs::path file(filePath);
         file /= bmcImage;
 
-        if (!fs::exists(file))
+        std::error_code ec;
+        if (!fs::exists(file, ec))
         {
             valid = false;
             break;
