Fix power restore policy input parameter check
This changes the power restore policy command to return invalid
parameter for any unsupported policy option (greater than 0x03).
Tested:
ipmitool raw 0 6 0
07
ipmitool chassis status
Power Restore Policy : always-off
ipmitool raw 0 6 1
07
ipmitool chassis status
Power Restore Policy : previous
ipmitool raw 0 6 2
07
ipmitool chassis status
Power Restore Policy : always-on
ipmitool raw 0 6 3
07
ipmitool chassis status
Power Restore Policy : always-on
ipmitool raw 0 6 4
Unable to send RAW command (channel=0x0 netfn=0x0 lun=0x0 cmd=0x6 rsp=0xcc): Invalid data field in request
Change-Id: Ie78e00753f6dfd8b7bccce38c239a8103b6cc3fd
Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
diff --git a/chassishandler.cpp b/chassishandler.cpp
index 1738ccc..0f2d10c 100644
--- a/chassishandler.cpp
+++ b/chassishandler.cpp
@@ -781,8 +781,6 @@
static constexpr uint8_t noChange = 0x03;
static constexpr uint8_t allSupport = 0x01 | 0x02 | 0x04;
-static constexpr uint8_t policyBitMask = 0x07;
-static constexpr uint8_t setPolicyReqLen = 1;
/* helper function for Get Chassis Status Command
*/
@@ -1703,26 +1701,27 @@
}
}
-ipmi::RspType<uint8_t>
+ipmi::RspType<uint3_t, // policy support
+ uint5_t // reserved
+ >
ipmiChassisSetPowerRestorePolicy(boost::asio::yield_context yield,
- uint8_t policy)
+ uint3_t policy, uint5_t reserved)
{
- constexpr uint8_t ccParamNotSupported = 0x80;
power_policy::DbusValue value =
power_policy::RestorePolicy::Policy::AlwaysOff;
- if (policy & ~power_policy::policyBitMask)
+ if (reserved || (policy > power_policy::noChange))
{
phosphor::logging::log<level::ERR>(
"Reserved request parameter",
entry("REQ=0x%x", static_cast<int>(policy)));
- return ipmi::response(ccParamNotSupported);
+ return ipmi::responseInvalidFieldRequest();
}
if (policy == power_policy::noChange)
{
// just return the supported policy
- return ipmi::responseSuccess(power_policy::allSupport);
+ return ipmi::responseSuccess(power_policy::allSupport, reserved);
}
for (auto const& it : power_policy::dbusToIpmi)
@@ -1765,7 +1764,7 @@
return ipmi::responseUnspecifiedError();
}
- return ipmi::responseSuccess(power_policy::allSupport);
+ return ipmi::responseSuccess(power_policy::allSupport, reserved);
}
void register_netfn_chassis_functions()
diff --git a/chassishandler.hpp b/chassishandler.hpp
index 6cffe58..dcaf06c 100644
--- a/chassishandler.hpp
+++ b/chassishandler.hpp
@@ -14,8 +14,6 @@
IPMI_CMD_CHASSIS_CONTROL = 0x02,
IPMI_CMD_CHASSIS_IDENTIFY = 0x04,
IPMI_CMD_SET_CHASSIS_CAP = 0x05,
- // Set Power Restore Policy
- IPMI_CMD_SET_RESTORE_POLICY = 0x06,
// Get capability bits
IPMI_CMD_SET_SYS_BOOT_OPTIONS = 0x08,
IPMI_CMD_GET_SYS_BOOT_OPTIONS = 0x09,