From 50539d364648834e5c0fac6bceef00646b4fde5d Mon Sep 17 00:00:00 2001 From: Patrick Venture Date: Mon, 3 Dec 2018 09:01:55 -0800 Subject: bugfix: ipmi: set dataLen to zero when appropriate On failures (or some silent success), set the return buffer length to 0. Change-Id: I118788ffddd2bfc031b3392db4cf13ab04b49287 Signed-off-by: Patrick Venture --- ipmi.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'ipmi.cpp') diff --git a/ipmi.cpp b/ipmi.cpp index e2e0fef..92955f9 100644 --- a/ipmi.cpp +++ b/ipmi.cpp @@ -99,6 +99,7 @@ ipmi_ret_t enumerateBlob(ManagerInterface* mgr, const uint8_t* reqBuf, /* Verify datalen is >= sizeof(request) */ struct BmcBlobEnumerateTx request; auto reply = reinterpret_cast(replyCmdBuf); + (*dataLen) = 0; std::memcpy(&request, reqBuf, sizeof(request)); @@ -125,6 +126,7 @@ ipmi_ret_t openBlob(ManagerInterface* mgr, const uint8_t* reqBuf, size_t requestLen = (*dataLen); auto request = reinterpret_cast(reqBuf); uint16_t session; + (*dataLen) = 0; std::string path = stringFromBuffer( request->blobId, (requestLen - sizeof(struct BmcBlobOpenTx))); @@ -154,6 +156,7 @@ ipmi_ret_t closeBlob(ManagerInterface* mgr, const uint8_t* reqBuf, { struct BmcBlobCloseTx request; std::memcpy(&request, reqBuf, sizeof(request)); + (*dataLen) = 0; /* Attempt to close. */ if (!mgr->close(request.sessionId)) @@ -161,7 +164,6 @@ ipmi_ret_t closeBlob(ManagerInterface* mgr, const uint8_t* reqBuf, return IPMI_CC_UNSPECIFIED_ERROR; } - (*dataLen) = 0; return IPMI_CC_OK; } @@ -170,6 +172,7 @@ ipmi_ret_t deleteBlob(ManagerInterface* mgr, const uint8_t* reqBuf, { size_t requestLen = (*dataLen); auto request = reinterpret_cast(reqBuf); + (*dataLen) = 0; std::string path = stringFromBuffer( request->blobId, (requestLen - sizeof(struct BmcBlobDeleteTx))); @@ -184,7 +187,6 @@ ipmi_ret_t deleteBlob(ManagerInterface* mgr, const uint8_t* reqBuf, return IPMI_CC_UNSPECIFIED_ERROR; } - (*dataLen) = 0; return IPMI_CC_OK; } @@ -215,6 +217,7 @@ ipmi_ret_t statBlob(ManagerInterface* mgr, const uint8_t* reqBuf, { size_t requestLen = (*dataLen); auto request = reinterpret_cast(reqBuf); + (*dataLen) = 0; std::string path = stringFromBuffer( request->blobId, (requestLen - sizeof(struct BmcBlobStatTx))); @@ -238,6 +241,7 @@ ipmi_ret_t sessionStatBlob(ManagerInterface* mgr, const uint8_t* reqBuf, { struct BmcBlobSessionStatTx request; std::memcpy(&request, reqBuf, sizeof(request)); + (*dataLen) = 0; /* Attempt to stat. */ struct BlobMeta meta; @@ -255,6 +259,7 @@ ipmi_ret_t commitBlob(ManagerInterface* mgr, const uint8_t* reqBuf, { size_t requestLen = (*dataLen); auto request = reinterpret_cast(reqBuf); + (*dataLen) = 0; /* Sanity check the commitDataLen */ if (request->commitDataLen > (requestLen - sizeof(struct BmcBlobCommitTx))) @@ -270,7 +275,6 @@ ipmi_ret_t commitBlob(ManagerInterface* mgr, const uint8_t* reqBuf, return IPMI_CC_UNSPECIFIED_ERROR; } - (*dataLen) = 0; return IPMI_CC_OK; } @@ -308,6 +312,7 @@ ipmi_ret_t writeBlob(ManagerInterface* mgr, const uint8_t* reqBuf, { size_t requestLen = (*dataLen); auto request = reinterpret_cast(reqBuf); + (*dataLen) = 0; uint32_t size = requestLen - sizeof(struct BmcBlobWriteTx); std::vector data(size); @@ -328,6 +333,7 @@ ipmi_ret_t writeMeta(ManagerInterface* mgr, const uint8_t* reqBuf, { size_t requestLen = (*dataLen); struct BmcBlobWriteMetaTx request; + (*dataLen) = 0; /* Copy over the request. */ std::memcpy(&request, reqBuf, sizeof(request)); -- cgit v1.2.3