diff options
author | Stephen Cprek <smcprek@us.ibm.com> | 2017-10-25 10:07:40 -0500 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2017-11-06 13:06:35 -0500 |
commit | 94b12d2ea05031aecf05601575608f781bf9e526 (patch) | |
tree | dbccb6dacfa2a63f9bc9d16601262aa997df1687 | |
parent | 97f6525326d7ad9fa099be2b503a971c9325f503 (diff) | |
download | talos-hostboot-94b12d2ea05031aecf05601575608f781bf9e526.tar.gz talos-hostboot-94b12d2ea05031aecf05601575608f781bf9e526.zip |
Enable preverified lid loading from pnor and Master Container Lid
Change-Id: Ic6bc381148796c49c928eb1d3586039203eea822
RTC:125304
RTC:178163
CMVC-Prereq: 1036742
CMVC-Prereq: 1037898
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48825
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Marshall J. Wilks <mjwilks@us.ibm.com>
Reviewed-by: Nicholas E. Bofferding <bofferdn@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
-rw-r--r-- | src/usr/runtime/populate_hbruntime.C | 4 | ||||
-rw-r--r-- | src/usr/runtime/preverifiedlidmgr.C | 8 | ||||
-rw-r--r-- | src/usr/util/test/testmclmgr.H | 71 | ||||
-rw-r--r-- | src/usr/util/utilmclmgr.C | 7 |
4 files changed, 71 insertions, 19 deletions
diff --git a/src/usr/runtime/populate_hbruntime.C b/src/usr/runtime/populate_hbruntime.C index 12a6fba9f..38e1236ab 100644 --- a/src/usr/runtime/populate_hbruntime.C +++ b/src/usr/runtime/populate_hbruntime.C @@ -1092,9 +1092,6 @@ errlHndl_t populate_HbRsvMem(uint64_t i_nodeId) break; } - // @TODO RTC:125304 enable when PHYP changes necessary for pre-verified - // lids are in a fips release -/* // Load lids from Master Container Lid Container provided by FSP if (INITSERVICE::spBaseServicesEnabled()) { @@ -1105,7 +1102,6 @@ errlHndl_t populate_HbRsvMem(uint64_t i_nodeId) break; } } -*/ } while(0); // If lock obtained, always unlock Pre verified lid manager diff --git a/src/usr/runtime/preverifiedlidmgr.C b/src/usr/runtime/preverifiedlidmgr.C index 4e5d9a2dc..4e869711f 100644 --- a/src/usr/runtime/preverifiedlidmgr.C +++ b/src/usr/runtime/preverifiedlidmgr.C @@ -180,12 +180,9 @@ errlHndl_t PreVerifiedLidMgr::_loadFromPnor(const PNOR::SectionId i_sec, bool l_loadImage = false; if(cv_payloadKind == TARGETING::PAYLOAD_KIND_PHYP) { - // @TODO RTC:178163 enable when PHYP changes necessary for pre-verified - // lids are in a fips release -/* l_loadImage = true; // Verified Lid - Header Only - if ( (l_lids.containerLid != INVALID_LIDID) && + if ( (l_lids.containerLid != Util::INVALID_LIDID) && !isLidLoaded(l_lids.containerLid)) { char l_containerLidStr [Util::lidIdStrLength] {}; @@ -204,7 +201,7 @@ errlHndl_t PreVerifiedLidMgr::_loadFromPnor(const PNOR::SectionId i_sec, } // Verified Lid - Content Only - if ( (l_lids.lid != INVALID_LIDID) && + if ( (l_lids.lid != Util::INVALID_LIDID) && !isLidLoaded(l_lids.lid)) { char l_lidStr[Util::lidIdStrLength] {}; @@ -220,7 +217,6 @@ errlHndl_t PreVerifiedLidMgr::_loadFromPnor(const PNOR::SectionId i_sec, break; } } -*/ } else if(cv_payloadKind == TARGETING::PAYLOAD_KIND_SAPPHIRE) { diff --git a/src/usr/util/test/testmclmgr.H b/src/usr/util/test/testmclmgr.H index 9f425a285..290c73d5c 100644 --- a/src/usr/util/test/testmclmgr.H +++ b/src/usr/util/test/testmclmgr.H @@ -32,6 +32,7 @@ #include "../utilbase.H" #include <usr/vmmconst.h> #include <runtime/preverifiedlidmgr.H> +#include <util/util_reasoncodes.H> namespace MCL { @@ -224,9 +225,9 @@ public: /** * @brief Test that MCL manager properly parses a MCL */ - void testMCLparser(void) + void testMclParser(void) { - UTIL_FT(ENTER_MRK"testMCLparser start" ); + UTIL_FT(ENTER_MRK"testMclParser start" ); // Generate test MCL TestMcl l_TestMcl{}; @@ -237,10 +238,10 @@ public: // Ensure the Comp Info Caches match if (l_TestMcl.iv_compInfoCache != l_mcl.iv_compInfoCache) { - TS_FAIL("testMCLparser> Comp Info Caches do not match"); + TS_FAIL("testMclParser> Comp Info Caches do not match"); } - UTIL_FT(EXIT_MRK"testMCLparser complete"); + UTIL_FT(EXIT_MRK"testMclParser complete"); } void testProcessMclComponents() @@ -291,7 +292,7 @@ public: errlHndl_t l_errl = nullptr; // Generate test MCL with Secure Lids - TestMcl l_TestMcl { {Util::TEST_LIDID, Util::TEST_LIDID}, + TestMcl l_TestMcl { {Util::TEST_LIDID}, {{COMP_TEST2,true}} }; @@ -324,6 +325,66 @@ public: UTIL_FT(EXIT_MRK"testProcessSecureMclComponents complete"); } + + void testMclSizeMismatch() + { + UTIL_FT(ENTER_MRK"testMclSizeMismatch start" ); + + errlHndl_t l_errl = nullptr; + + // Generate test MCL with Secure Lids + // Add 2 secure sections. + // The secure header for the first one will only have the size of 1 lid + // So we will get a mismatch between the Secure header's total container + // size and what the UtilLidMgr reads out. + TestMcl l_TestMcl { {Util::TEST_LIDID, Util::TEST_LIDID}, + {{COMP_TEST2,true}} + }; + + // Pass test MCL to MCL manager + MasterContainerLidMgr l_mcl(l_TestMcl.iv_bufferStart, + l_TestMcl.iv_size); + + // Ensure the Comp Info Caches match + if (l_TestMcl.iv_compInfoCache != l_mcl.iv_compInfoCache) + { + TS_FAIL("testMclSizeMismatch> Comp Info Caches do not match"); + } + + PreVerifiedLidMgr::initLock(PREVERLIDMGR_TEST_ADDR); + + // Get Instance of Pre-Verified lid manager + auto l_preVerLidMgr = PreVerifiedLidMgr::getInstance(); + + // Clear lids loaded cache as other test cases fill it in. + l_preVerLidMgr.cv_lidsLoaded.clear(); + + l_errl = l_mcl.processComponents(); + if(l_errl) + { + // Expected Error + if(l_errl->reasonCode() == Util::UTIL_MCL_SIZE_MISMATCH) + { + delete l_errl; + l_errl = nullptr; + UTIL_FT("testMclSizeMismatch expected error"); + } + // Not Expected Error + else + { + errlCommit(l_errl,UTIL_COMP_ID); + TS_FAIL("testMclSizeMismatch> processComponents returned an unexpected error"); + } + } + else + { + TS_FAIL("testMclSizeMismatch> processComponents did not return expected error"); + } + + PreVerifiedLidMgr::unlock(); + + UTIL_FT(EXIT_MRK"testMclSizeMismatch complete"); + } }; #endif
\ No newline at end of file diff --git a/src/usr/util/utilmclmgr.C b/src/usr/util/utilmclmgr.C index 824df42b7..f7ad7bce6 100644 --- a/src/usr/util/utilmclmgr.C +++ b/src/usr/util/utilmclmgr.C @@ -621,11 +621,10 @@ errlHndl_t MasterContainerLidMgr::verifyExtend(const ComponentID& i_compId, SECUREBOOT::ContainerHeader l_conHdr(iv_pVaddr); // Cache size stats into comp info cache - // @TODO RTC:125304 re-enable when total size is supported correctly - //io_compInfo.totalSize = l_conHdr.totalContainerSize(); + io_compInfo.totalSize = l_conHdr.totalContainerSize(); io_compInfo.protectedSize = l_conHdr.payloadTextSize(); - //io_compInfo.unprotectedSize = l_conHdr.totalContainerSize() - - // l_conHdr.payloadTextSize(); + io_compInfo.unprotectedSize = l_conHdr.totalContainerSize() - + l_conHdr.payloadTextSize(); // @TODO RTC:125304 re-enable when component id is supported in lids if (0)// memcmp(l_conHdr.componentId(), i_compId.data(), |