hothd: Fix payload_update crash on error
Avoid payload_upload tool crash on underlying errors
by graceful exit.
Tested:
root@uycyv5-nfd01:~# coredumpctl
No coredumps found.
root@uycyv5-nfd01:~# payload_update -i ***_ioc_4_3 update /tmp/d1_injected_sas4024fw.img -r -m 1
Failed to get SPS passthrough status: sd_bus_call: org.freedesktop.DBus.Error.ServiceUnknown: The name is not activatable
Target did not report SPS passthrough disabled. Attempting reset
***_ioc_4_3: Put target in reset
terminate called after throwing an instance of 'sdbusplus::exception::SdBusError'
what(): sd_bus_call: org.freedesktop.DBus.Error.ServiceUnknown: The name is not activatable
Aborted (core dumped)
root@uycyv5-nfd01:~# coredumpctl
TIME PID UID GID SIG COREFILE EXE SIZE
Wed 2025-01-08 13:11:29 PST 5572 0 0 SIGABRT present /usr/bin/payload_update 64.7K
root@uycyv5-nfd01:~# /tmp/payload_update -i ***_ioc_4_3 update /tmp/d1_injected_sas4024fw.img -r -m 1
Failed to get SPS passthrough status: sd_bus_call: org.freedesktop.DBus.Error.ServiceUnknown: The name is not activatable
Target did not report SPS passthrough disabled. Attempting reset
***_ioc_4_3: Put target in reset
Failed to execute command: sd_bus_call: org.freedesktop.DBus.Error.ServiceUnknown: The name is not activatable
root@uycyv5-nfd01:~# coredumpctl
TIME PID UID GID SIG COREFILE EXE SIZE
Wed 2025-01-08 13:11:29 PST 5572 0 0 SIGABRT present /usr/bin/payload_update 64.7K
root@uycyv5-nfd01:~#
Google-Bug-Id: 361460251
Change-Id: Ifab3ffadc8fcb318f9abd4bafd457e4cf4c95e98
Signed-off-by: Konda Reddy Kachana <kkachana@google.com>
diff --git a/tools/payload_update_main.cpp b/tools/payload_update_main.cpp
index ba094d1..40160b7 100644
--- a/tools/payload_update_main.cpp
+++ b/tools/payload_update_main.cpp
@@ -32,10 +32,20 @@
{
return EXIT_FAILURE;
}
- if (!cli.execute())
+
+ try {
+ if (!cli.execute())
+ {
+ std::cerr << argv[0] << ": Failed to execute command!" << '\n';
+ return EXIT_FAILURE;
+ }
+ }
+ catch (const std::exception& e)
{
- std::cerr << argv[0] << ": Failed to execute command!" << '\n';
+ std::cerr << "Failed to execute command: " << e.what()
+ << '\n';
return EXIT_FAILURE;
}
+
return EXIT_SUCCESS;
}