From 187f564a35235d38a59af3dfb18bb76883851d30 Mon Sep 17 00:00:00 2001 From: Tom Joseph Date: Thu, 29 Mar 2018 13:49:06 +0530 Subject: Check if the FRU Id is valid for FRU commands Validate FRU Id before proceesing with the command handling. Do not report error log for any FRU command failure, since IPMI is an external interface. Resolves openbmc/openbmc#3016 Change-Id: I9e2af3ce50285662f1b8f9600222e9ff3057a7e3 Signed-off-by: Tom Joseph --- storagehandler.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/storagehandler.cpp b/storagehandler.cpp index d1392e6..6f97bef 100644 --- a/storagehandler.cpp +++ b/storagehandler.cpp @@ -595,6 +595,14 @@ ipmi_ret_t ipmi_storage_get_fru_inv_area_info( ipmi_ret_t rc = IPMI_CC_OK; const FruInvenAreaInfoRequest* reqptr = reinterpret_cast(request); + + auto iter = frus.find(reqptr->fruID); + if (iter == frus.end()) + { + *data_len = 0; + return IPMI_CC_SENSOR_INVALID; + } + try { const auto& fruArea = getFruAreaData(reqptr->fruID); @@ -614,7 +622,6 @@ ipmi_ret_t ipmi_storage_get_fru_inv_area_info( rc = IPMI_CC_UNSPECIFIED_ERROR; *data_len = 0; log(e.what()); - report(); } return rc; } @@ -630,6 +637,14 @@ ipmi_ret_t ipmi_storage_read_fru_data( reinterpret_cast(request); auto resptr = reinterpret_cast(response); + + auto iter = frus.find(reqptr->fruID); + if (iter == frus.end()) + { + *data_len = 0; + return IPMI_CC_SENSOR_INVALID; + } + auto offset = static_cast(reqptr->offsetMS << 8 | reqptr->offsetLS); try @@ -658,7 +673,6 @@ ipmi_ret_t ipmi_storage_read_fru_data( rc = IPMI_CC_UNSPECIFIED_ERROR; *data_len = 0; log(e.what()); - report(); } return rc; } -- cgit v1.2.1