summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Venture <venture@google.com>2018-12-03 09:01:55 -0800
committerPatrick Venture <venture@google.com>2018-12-03 10:19:47 -0800
commit50539d364648834e5c0fac6bceef00646b4fde5d (patch)
tree1d7f97f96120407ff372ea6660b566275e779075
parent8aee057be55156d1daec286839029bc1ee511dff (diff)
downloadphosphor-ipmi-blobs-50539d364648834e5c0fac6bceef00646b4fde5d.tar.gz
phosphor-ipmi-blobs-50539d364648834e5c0fac6bceef00646b4fde5d.zip
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 <venture@google.com>
-rw-r--r--ipmi.cpp12
-rw-r--r--main.cpp1
2 files changed, 10 insertions, 3 deletions
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<struct BmcBlobEnumerateRx*>(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<const struct BmcBlobOpenTx*>(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<const struct BmcBlobDeleteTx*>(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<const struct BmcBlobStatTx*>(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<const struct BmcBlobCommitTx*>(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<const struct BmcBlobWriteTx*>(reqBuf);
+ (*dataLen) = 0;
uint32_t size = requestLen - sizeof(struct BmcBlobWriteTx);
std::vector<uint8_t> 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));
diff --git a/main.cpp b/main.cpp
index 7bbae28..bc93ddd 100644
--- a/main.cpp
+++ b/main.cpp
@@ -53,6 +53,7 @@ static ipmi_ret_t handleBlobCommand(ipmi_cmd_t cmd, const uint8_t* reqBuf,
validateBlobCommand(&crc, reqBuf, replyCmdBuf, dataLen, &rc);
if (command == nullptr)
{
+ (*dataLen) = 0;
return rc;
}
OpenPOWER on IntegriCloud