pldmd: use RAII to manage recvMsg buffer lifetime Replace manual free() calls with std::unique_ptr RAII wrappers to ensure the buffer is freed on error paths. Change-Id: Ic22557d7f68607bdae1be83809b69886803adb48 Signed-off-by: Ravi Teja <rbailapu@qti.qualcomm.com>
diff --git a/pldmd/pldmd.cpp b/pldmd/pldmd.cpp index 8df1b50..a1b4595 100644 --- a/pldmd/pldmd.cpp +++ b/pldmd/pldmd.cpp
@@ -367,6 +367,8 @@ size_t recvDataLength = 0; returnCode = pldmTransport.recvMsg(TID, requestMsg, recvDataLength); + std::unique_ptr<void, decltype(&free)> requestMsgPtr(requestMsg, free); + if (returnCode == PLDM_REQUESTER_SUCCESS) { std::vector<uint8_t> requestMsgVec( @@ -417,8 +419,6 @@ "Failed to receive PLDM request for pldmTransport, response code '{RETURN_CODE}'", "RETURN_CODE", returnCode); } - /* Free requestMsg after using */ - free(requestMsg); }; bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
diff --git a/utilities/requester/set_state_effecter_async.cpp b/utilities/requester/set_state_effecter_async.cpp index fc054d6..02efd7d 100644 --- a/utilities/requester/set_state_effecter_async.cpp +++ b/utilities/requester/set_state_effecter_async.cpp
@@ -9,6 +9,8 @@ #include <sdeventplus/source/io.hpp> #include <array> +#include <cstdlib> +#include <memory> using namespace sdeventplus; using namespace sdeventplus::source; @@ -70,6 +72,8 @@ error("Failed to receive PLDM response, rc={RC}", "RC", rc); return; } + std::unique_ptr<void, decltype(&free)> responseMsgPtr( + responseMsg, free); pldm_msg* response = new (responseMsg) pldm_msg; if (dstTid != srcTid || !pldm_msg_hdr_correlate_response(&request->hdr, &response->hdr)) @@ -77,7 +81,6 @@ error( "Unexpected PLDM response, received TID={RTID} expected TID={ETID}", "RTID", srcTid, "ETID", dstTid); - free(responseMsg); return; } @@ -87,7 +90,6 @@ info( "Done! Got the response for PLDM request message, response code '{RC}'", "RC", lg2::hex, response->payload[0]); - free(responseMsg); exit(EXIT_SUCCESS); }; IO io(event, pldmTransport.getEventSource(), EPOLLIN, std::move(callback));