summaryrefslogtreecommitdiffstats
path: root/src/usr/secureboot/base/service.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/secureboot/base/service.C')
-rw-r--r--src/usr/secureboot/base/service.C73
1 files changed, 67 insertions, 6 deletions
diff --git a/src/usr/secureboot/base/service.C b/src/usr/secureboot/base/service.C
index 21900a5fa..1f5b5d83d 100644
--- a/src/usr/secureboot/base/service.C
+++ b/src/usr/secureboot/base/service.C
@@ -234,8 +234,6 @@ errlHndl_t getAllSecurityRegisters(std::vector<SecureRegisterValues> & o_regs,
DEVICE_FSI_ADDRESS(op_addr) );
}
- assert(op_actual_size == op_expected_size,"getAllSecurityRegisters: BUG! size returned from device write (%d) is not the expected size of %d", op_actual_size, op_expected_size);
-
if( err )
{
// Something failed on the read. Commit the error
@@ -249,6 +247,33 @@ errlHndl_t getAllSecurityRegisters(std::vector<SecureRegisterValues> & o_regs,
errlCommit( err, SECURE_COMP_ID );
continue;
}
+
+ if (op_actual_size != op_expected_size)
+ {
+ SB_ERR("getAllSecurityRegisters: size returned from device write (%d) is not the expected size of %d",
+ op_actual_size, op_expected_size);
+ /*@
+ * @errortype
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid SECUREBOOT::MOD_SECURE_GET_ALL_SEC_REGS
+ * @reasoncode SECUREBOOT::RC_DEVICE_WRITE_ERR
+ * @userdata1 Actual size written
+ * @userdata2 Expected size written
+ * @devdesc Device write did not return expected size
+ * @custdesc Firmware Error
+ */
+ err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ SECUREBOOT::MOD_SECURE_GET_ALL_SEC_REGS,
+ SECUREBOOT::RC_DEVICE_WRITE_ERR,
+ op_actual_size,
+ op_expected_size,
+ true);
+ addSecureUserDetailsToErrlog(err);
+ err->collectTrace(SECURE_COMP_NAME);
+ break;
+ }
+
// push back result
l_secRegValues.tgt=procTgt;
l_secRegValues.addr=op_addr;
@@ -316,7 +341,11 @@ void* initializeBase(void* unused)
#endif
// Load original header.
- Singleton<Header>::instance().loadHeader();
+ l_errl = Singleton<Header>::instance().loadHeader();
+ if (l_errl)
+ {
+ break;
+ }
} while(0);
return l_errl;
@@ -613,11 +642,43 @@ uint8_t getSbeSecurityMode()
return g_sbeSecurityMode;
}
-void setSbeSecurityMode(uint8_t i_sbeSecurityMode)
+errlHndl_t setSbeSecurityMode(uint8_t i_sbeSecurityMode)
{
- assert(i_sbeSecurityMode == 0 || i_sbeSecurityMode == 1,
- "SBE Security Mode can only be set to 0 or 1");
+ errlHndl_t l_errl = nullptr;
+
+ do {
+ // Ensure a valid mode
+ if (i_sbeSecurityMode != 0 && i_sbeSecurityMode != 1)
+ {
+ SB_ERR("SBE Security Mode can only be set to 0 or 1");
+
+ /*@
+ * @errortype
+ * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE
+ * @moduleid SECUREBOOT::MOD_SECURE_SET_SBE_SECURE_MODE
+ * @reasoncode SECUREBOOT::RC_SBE_INVALID_SEC_MODE
+ * @userdata1 Security mode to set
+ * @userdata2 0
+ * @devdesc Invalid SBE security mode
+ * @custdesc Platform security problem detected
+ */
+ l_errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ SECUREBOOT::MOD_SECURE_SET_SBE_SECURE_MODE,
+ SECUREBOOT::RC_SBE_INVALID_SEC_MODE,
+ i_sbeSecurityMode,
+ 0,
+ true);
+ l_errl->collectTrace(SECURE_COMP_NAME);
+ addSecureUserDetailsToErrlog(l_errl);
+ break;
+ }
+
g_sbeSecurityMode = i_sbeSecurityMode;
+
+ } while(0);
+
+ return l_errl;
}
} //namespace SECUREBOOT
OpenPOWER on IntegriCloud