summaryrefslogtreecommitdiffstats
path: root/src/sbefw/sbecmdparser.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/sbefw/sbecmdparser.C')
-rw-r--r--src/sbefw/sbecmdparser.C29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/sbefw/sbecmdparser.C b/src/sbefw/sbecmdparser.C
index ba6b1e5a..73963936 100644
--- a/src/sbefw/sbecmdparser.C
+++ b/src/sbefw/sbecmdparser.C
@@ -50,6 +50,7 @@
#include "sbecmdtracearray.H"
#include "sbecmdCntrlTimer.H"
#include "sbecmdfastarray.H"
+#include "sbeglobals.H"
// Declaration
static const uint16_t HARDWARE_FENCED_STATE =
@@ -170,12 +171,12 @@ static sbeCmdStruct_t g_sbeRegAccessCmdArray [] =
{
{sbeGetReg,
SBE_CMD_GETREG,
- HARDWARE_FENCED_STATE,
+ HARDWARE_FENCED_STATE | SBE_FENCE_AT_SECURE_MODE,
},
{sbePutReg,
SBE_CMD_PUTREG,
- PUT_HARDWARE_FENCED_STATE,
+ PUT_HARDWARE_FENCED_STATE | SBE_FENCE_AT_SECURE_MODE,
},
};
@@ -475,11 +476,12 @@ uint8_t sbeValidateCmdClass (const uint8_t i_cmdClass,
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
-bool sbeIsCmdAllowedAtState (const uint8_t i_cmdClass,
- const uint8_t i_cmdOpcode)
+sbeChipOpRc_t sbeIsCmdAllowed (const uint8_t i_cmdClass,
+ const uint8_t i_cmdOpcode)
{
#define SBE_FUNC " sbeIsCmdAllowedAtState "
bool l_ret = true;
+ sbeChipOpRc_t retRc;
uint8_t l_numCmds = 0;
sbeCmdStruct_t *l_pCmd = NULL;
l_numCmds = sbeGetCmdStructAttr (i_cmdClass, &l_pCmd);
@@ -555,10 +557,25 @@ bool sbeIsCmdAllowedAtState (const uint8_t i_cmdClass,
l_ret = false;
break;
}
+
+ if(false == l_ret)
+ {
+ retRc.primStatus = SBE_PRI_INVALID_COMMAND;
+ retRc.secStatus = SBE_SEC_COMMAND_NOT_ALLOWED_IN_THIS_STATE;
+ break;
+ }
+ // Check if the command is allowed in current security mode
+ if((SBE_GLOBAL->sbeFWSecurityEnabled)
+ && (SBE_FENCE_AT_SECURE_MODE & l_pCmd->cmd_state_fence))
+ {
+ retRc.primStatus = SBE_PRI_UNSECURE_ACCESS_DENIED;
+ retRc.secStatus = SBE_SEC_BLACKLISTED_CHIPOP_ACCESS;
+ break;
+ }
+ break;
}
}
- // For any other state, which is not handled above, return from here
- return l_ret;
+ return retRc;
#undef SBE_FUNC
}
OpenPOWER on IntegriCloud