diff options
| author | Matt Raybuck <mraybuc@us.ibm.com> | 2018-11-15 09:45:07 -0600 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-11-27 13:47:16 -0600 |
| commit | 022f2d75d80d7ac11abec2e87da76b8691d0498b (patch) | |
| tree | 6df0d37f51e0a2f2a55eb9a987e1ed07530dc8ea /src | |
| parent | b08f9e7eb4a76ed813b0596b4b0eab30070cb3a4 (diff) | |
| download | blackbird-hostboot-022f2d75d80d7ac11abec2e87da76b8691d0498b.tar.gz blackbird-hostboot-022f2d75d80d7ac11abec2e87da76b8691d0498b.zip | |
Add VERSION to all OpenPOWER HBRT error logs
Now that the VERSION partition is a secure section, in order to have the
version info in all runtime error logs the VERSION section has been put
into reserved memory which can then be loaded and added to all HBRT
OpenPOWER error logs.
Change-Id: Iaf74d19270f8221710f30834097e131f4dadeeba
RTC:200439
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/68855
Reviewed-by: Ilya Smirnov <ismirno@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Nicholas E. Bofferding <bofferdn@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/include/usr/util/utillidmgr.H | 3 | ||||
| -rw-r--r-- | src/usr/errl/errlentry.C | 96 | ||||
| -rw-r--r-- | src/usr/runtime/common/runtime_utils.C | 3 | ||||
| -rw-r--r-- | src/usr/runtime/populate_hbruntime.C | 7 | ||||
| -rw-r--r-- | src/usr/runtime/test/testpreverifiedlidmgr.H | 13 | ||||
| -rw-r--r-- | src/usr/util/runtime/utillidmgr_rt.C | 6 | ||||
| -rw-r--r-- | src/usr/util/utillidpnor.C | 3 |
7 files changed, 123 insertions, 8 deletions
diff --git a/src/include/usr/util/utillidmgr.H b/src/include/usr/util/utillidmgr.H index 9b2b349f3..29e317233 100644 --- a/src/include/usr/util/utillidmgr.H +++ b/src/include/usr/util/utillidmgr.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2017 */ +/* Contributors Listed Below - COPYRIGHT 2013,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -48,6 +48,7 @@ namespace Util enum LidId { TEST_LIDID = 0x00000111, + VERSION_LIDID = 0x0000FFFF, OCC_LIDID = 0x81e00430, OCC_CONTAINER_LIDID = 0x80d0000b, MCL_LIDID = 0x80d00020, diff --git a/src/usr/errl/errlentry.C b/src/usr/errl/errlentry.C index 7f7c9a5b0..99271a8da 100644 --- a/src/usr/errl/errlentry.C +++ b/src/usr/errl/errlentry.C @@ -71,6 +71,8 @@ #include <errl/errludsensor.H> #endif +#include <util/utillidmgr.H> + // Hostboot Image ID string extern char hbi_ImageId; @@ -672,6 +674,8 @@ void ErrlEntry::addHbBuildId() void ErrlEntry::addVersionInfo() { + TRACDCOMP(g_trac_errl, ENTER_MRK"addVersionInfo()"); + // Start of IPL only block; runtime does not support secure loading of // partitions #ifndef __HOSTBOOT_RUNTIME @@ -732,7 +736,8 @@ void ErrlEntry::addVersionInfo() size_t l_numberOfBytes = 0; - // Determine the size of the version data. + // Determine the size of the version data. The max size is the given + // size in the SectionInfo but can be less. while ((static_cast<char>(l_versionData[l_numberOfBytes]) != '\0') && l_numberOfBytes < l_pnorVersionInfo.size) { @@ -768,7 +773,94 @@ void ErrlEntry::addVersionInfo() } -#endif // End of IPL only block +// End of IPL only block +#else +// Start of runtime block. Since runtime doesn't support securing load of PNOR +// sections, we load the version info from reserved memory. + + // Version section of PNOR is only available to OpenPOWER systems. + if (!INITSERVICE::spBaseServicesEnabled()) + { + errlHndl_t l_errl = nullptr; + + do + { + + // Get PNOR Version + UtilLidMgr l_lidMgr(Util::VERSION_LIDID); + size_t l_lidSize = 0; + l_errl = l_lidMgr.getLidSize(l_lidSize); + + if (l_errl) + { + TRACFCOMP( g_trac_errl, + "addVersionInfo: Failed to getLidSize() - error"); + // Since an error occurred while attempting to add version info + // to another error log there is nothing that can be done with + // this error since attempting to commit it will lead to an + // infinite loop of committing the error and then recalling this + // function. If this error occurred then the VERSION partition + // is not added and the error log commit continues. + delete l_errl; + l_errl = nullptr; + break; + } + + TRACDCOMP(g_trac_errl, + "addVersionInfo: l_lidSize = %d", + l_lidSize); + + char* l_versionData = new char[l_lidSize](); + l_errl = l_lidMgr.getLid(l_versionData, l_lidSize); + + + if (l_errl) + { + TRACFCOMP( g_trac_errl, + "addVersionInfo: Failed to getLid() - error"); + // Since an error occurred while attempting to add version info + // to another error log there is nothing that can be done with + // this error since attempting to commit it will lead to an + // infinite loop of committing the error and then recalling this + // function. If this error occurred then the VERSION partition + // is not added and the error log commit continues. + delete l_errl; + l_errl = nullptr; + delete[] l_versionData; + l_versionData = nullptr; + break; + } + + size_t l_numberOfBytes = 0; + + // Determine the size of the version data. The max size is the + // lidSize but can be less. + while ((static_cast<char>(l_versionData[l_numberOfBytes]) != '\0') + && l_numberOfBytes < l_lidSize) + { + ++l_numberOfBytes; + } + + TRACDCOMP(g_trac_errl, + "addVersionInfo: l_numberOfBytes = %d", + l_numberOfBytes); + + char l_pVersionString[l_numberOfBytes + 1]={0}; + + memcpy(l_pVersionString, l_versionData, l_numberOfBytes); + + ErrlUserDetailsString(l_pVersionString).addToLog(this); + + delete[] l_versionData; + l_versionData = nullptr; + + } while(0); + + + } +#endif + + TRACFCOMP(g_trac_errl, EXIT_MRK"addVersionInfo()"); } diff --git a/src/usr/runtime/common/runtime_utils.C b/src/usr/runtime/common/runtime_utils.C index d87847f85..ba15de167 100644 --- a/src/usr/runtime/common/runtime_utils.C +++ b/src/usr/runtime/common/runtime_utils.C @@ -37,6 +37,7 @@ const PreVerifyVector preVerifiedPnorSections { {PNOR::OCC, true}, {PNOR::WOFDATA, true}, {PNOR::HCODE, true}, + {PNOR::VERSION, true}, {PNOR::RINGOVD, false}, }; @@ -76,4 +77,4 @@ bool isPreVerifiedSectionSecure(const PNOR::SectionId i_section) return l_result; } -}
\ No newline at end of file +} diff --git a/src/usr/runtime/populate_hbruntime.C b/src/usr/runtime/populate_hbruntime.C index 5c0596f35..db32eef40 100644 --- a/src/usr/runtime/populate_hbruntime.C +++ b/src/usr/runtime/populate_hbruntime.C @@ -1658,6 +1658,13 @@ errlHndl_t populate_HbRsvMem(uint64_t i_nodeId, bool i_master_node) continue; } + // Skip VERSION section for non-BMC based systems. + if ((secIdPair.first == PNOR::VERSION) + && INITSERVICE::spBaseServicesEnabled()) + { + continue; + } + l_elog = hbResvLoadSecureSection(secIdPair.first, secIdPair.second); if (l_elog) diff --git a/src/usr/runtime/test/testpreverifiedlidmgr.H b/src/usr/runtime/test/testpreverifiedlidmgr.H index 47ba6c61b..78fcbd95c 100644 --- a/src/usr/runtime/test/testpreverifiedlidmgr.H +++ b/src/usr/runtime/test/testpreverifiedlidmgr.H @@ -83,6 +83,13 @@ class PreVerifiedLidMgrTest : public CxxTest::TestSuite // Handle all Pre verified PNOR sections for (const auto & secIdPair : RUNTIME::preVerifiedPnorSections) { + + // VERSION is not in standalone so ignore it here. + if (secIdPair.first == PNOR::VERSION) + { + continue; + } + l_errl = RUNTIME::hbResvLoadSecureSection(secIdPair.first, secIdPair.second); if (l_errl) @@ -110,6 +117,10 @@ class PreVerifiedLidMgrTest : public CxxTest::TestSuite // RINGOVD not permitted in secure mode. Meaning the Header and // Content lid will be missing. l_expectedLids -= 2; + + // VERSION is only an OpenPOWER partition so we need to adjust for + // it here since it doesn't exist for standalone. + l_expectedLids -= 2; } // Ensure the expected number of lids were loaded. @@ -129,4 +140,4 @@ class PreVerifiedLidMgrTest : public CxxTest::TestSuite } }; -#endif
\ No newline at end of file +#endif diff --git a/src/usr/util/runtime/utillidmgr_rt.C b/src/usr/util/runtime/utillidmgr_rt.C index 8efbb7ffc..ad5a7cd48 100644 --- a/src/usr/util/runtime/utillidmgr_rt.C +++ b/src/usr/util/runtime/utillidmgr_rt.C @@ -354,7 +354,8 @@ const uint32_t * UtilLidMgr::getLidList(size_t * o_num) Util::CUMULUS_HCODE_LIDID, Util::HCODE_CONTAINER_LIDID, Util::HWREFIMG_RINGOVD_LIDID, - Util::TARGETING_BINARY_LIDID + Util::TARGETING_BINARY_LIDID, + Util::VERSION_LIDID }; *o_num = sizeof(lidlist)/sizeof(lidlist[0]); TRACFCOMP(g_trac_hbrt, EXIT_MRK" get_lid_list"); @@ -371,7 +372,8 @@ bool UtilLidMgr::lidInHbResvMem(const uint32_t i_lidId) const i_lidId == Util::CUMULUS_HCODE_LIDID || i_lidId == Util::HCODE_CONTAINER_LIDID || i_lidId == Util::HWREFIMG_RINGOVD_LIDID || - i_lidId == Util::TARGETING_BINARY_LIDID; + i_lidId == Util::TARGETING_BINARY_LIDID || + i_lidId == Util::VERSION_LIDID; } //------------------------------------------------------------------------ diff --git a/src/usr/util/utillidpnor.C b/src/usr/util/utillidpnor.C index c7118c915..f304eab2d 100644 --- a/src/usr/util/utillidpnor.C +++ b/src/usr/util/utillidpnor.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014,2017 */ +/* Contributors Listed Below - COPYRIGHT 2014,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -49,6 +49,7 @@ const size_t lidIdStrLength = 9; static const PnorLidsMap PnorToLidsMap = { { PNOR::TESTRO, LidAndContainerLid(TEST_LIDID, INVALID_LIDID)}, + { PNOR::VERSION, LidAndContainerLid(VERSION_LIDID, INVALID_LIDID)}, { PNOR::OCC, LidAndContainerLid(OCC_LIDID, OCC_CONTAINER_LIDID)}, { PNOR::WOFDATA, LidAndContainerLid(WOF_LIDID, WOF_CONTAINER_LIDID)}, { PNOR::HCODE, LidAndContainerLid(NIMBUS_HCODE_LIDID, HCODE_CONTAINER_LIDID)}, |

