main: catch exceptions when loading blob handlers
If an error occurs while attempting to load the blob handlers (such as a
filesystem error), the uncaught exception will crash the entire IPMI
daemon. Instead, catch the exception and print an error message.
Tested: ipmid doesn't crash when /usr/lib/blobs-ipmid is missing
Signed-off-by: Benjamin Fair <benjaminfair@google.com>
Change-Id: Ic316f6e5aa3c4bc6eba4fa2e561b338f4b20f606
diff --git a/main.cpp b/main.cpp
index c6b5b04..e680d7c 100644
--- a/main.cpp
+++ b/main.cpp
@@ -26,6 +26,7 @@
#include <host-ipmid/iana.hpp>
#include <host-ipmid/oemrouter.hpp>
#include <memory>
+#include <phosphor-logging/log.hpp>
/* TODO: Swap out once https://gerrit.openbmc-project.xyz/12743 is merged */
namespace oem
@@ -36,6 +37,8 @@
namespace blobs
{
+using namespace phosphor::logging;
+
static ipmi_ret_t handleBlobCommand(ipmi_cmd_t cmd, const uint8_t* reqBuf,
uint8_t* replyCmdBuf, size_t* dataLen)
{
@@ -75,6 +78,14 @@
handleBlobCommand);
/* Install handlers. */
- loadLibraries(expectedHandlerPath);
+ try
+ {
+ loadLibraries(expectedHandlerPath);
+ }
+ catch (const std::exception& e)
+ {
+ log<level::ERR>("ERROR loading blob handlers",
+ entry("ERROR=%s", e.what()));
+ }
}
} // namespace blobs