diff options
| author | Nick Bofferding <bofferdn@us.ibm.com> | 2018-03-19 23:26:08 -0500 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-05-08 09:44:28 -0400 |
| commit | 2fe71f4ddc13e3c730fbb7e1fcfe0d319eddc333 (patch) | |
| tree | 6717b134419978a4b0836382364f98f620d1630c /src/usr/scom/plugins | |
| parent | 3c2b4bf2adc3e076d7dc9e2876b64b813a799260 (diff) | |
| download | talos-hostboot-2fe71f4ddc13e3c730fbb7e1fcfe0d319eddc333.tar.gz talos-hostboot-2fe71f4ddc13e3c730fbb7e1fcfe0d319eddc333.zip | |
Secure Boot: Implement Centaur SCOM cache
This change implements a Centaur SCOM cache for sensitive SCOM registers. The
cache is initialized and enabled before the first Centaur SCOM, and disabled
just prior to locking down the Centaur configuration. Once the Centaur has been
locked down, the real register values are compared to the cache entries, and the
Centaur is deconfigured (not garded) on any mismatch in assumptions.
RTC: 187288
Change-Id: I7b13bfd7eb6b427aba115d6944958bf55e171008
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57532
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>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Michael Baiocchi <mbaiocch@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/scom/plugins')
| -rw-r--r-- | src/usr/scom/plugins/errludP_cache.H | 135 | ||||
| -rw-r--r-- | src/usr/scom/plugins/scomUdParserFactory.H | 8 |
2 files changed, 141 insertions, 2 deletions
diff --git a/src/usr/scom/plugins/errludP_cache.H b/src/usr/scom/plugins/errludP_cache.H new file mode 100644 index 000000000..15f5ce747 --- /dev/null +++ b/src/usr/scom/plugins/errludP_cache.H @@ -0,0 +1,135 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/scom/plugins/errludP_cache.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2016,2018 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ + +#ifndef ERRLUDP_CACHE_H +#define ERRLUDP_CACHE_H + +/** +* @file errludP_cache.H +* +* Defines the ErrlUserDetailsParser classes that parse Centaur SCOM register +* cache mismatch FFDC +*/ + +#include "errluserdetails.H" + +namespace SECUREBOOT +{ + +namespace CENTAUR_SECURITY +{ + + /** + * @class UdParserCentaurCacheMismatch + * + * @brief Parses UdParserCentaurCacheMismatch user details sections + */ + class UdParserCentaurCacheMismatch : public ERRORLOG::ErrlUserDetailsParser + { + + public: + + /** + * @brief Constructor + */ + UdParserCentaurCacheMismatch() + { + } + + /** + * @brief Destructor + */ + virtual ~UdParserCentaurCacheMismatch() + { + } + + /** + * @brief Parses user detail data from an error log + * + * @param[in] i_version Version of the data + * @param[in] i_parse ErrlUsrParser object for outputting information + * @param[in] i_pBuffer Pointer to buffer containing detail data + * @param[in] i_buflen Length of the buffer + */ + virtual void parse( + errlver_t i_version, + ErrlUsrParser& i_parser, + void * i_pBuffer, + const uint32_t i_buflen) const + { + if(i_version < SCOM_UDT_VERSION_1) + { + i_parser.PrintHeading("SCOM cache FFDC: Unknown version"); + } + else + { + i_parser.PrintHeading("SCOM cache FFDC"); + + const char* fieldName[] = + { + "Register address", + "Unmasked expected value", + "Unmasked actual value", + "Mask", + "Masked expected value", + "Masked actual value", + }; + + const uint64_t* pField = + reinterpret_cast<const uint64_t *>(i_pBuffer); + for(size_t i=0; + i<sizeof(fieldName)/sizeof(fieldName[0]); + ++i) + { + if(i_buflen >= (i+1)*sizeof(*pField) ) + { + i_parser.PrintNumberUint64( + fieldName[i],"0x%016llX", + ERRORLOG::NTH_UINT64(pField+i)); + } + } + } + } + + private: + + // Parser isn't compiled with c++11 in all environments, and + // therefore "delete" of unused interfaces (like below) is not + // supported, nor are functions with move semantics + + // Disable compiler provided default functions + UdParserCentaurCacheMismatch( + const UdParserCentaurCacheMismatch&); + + UdParserCentaurCacheMismatch & operator=( + const UdParserCentaurCacheMismatch&); + }; + +} + +} + +#endif + diff --git a/src/usr/scom/plugins/scomUdParserFactory.H b/src/usr/scom/plugins/scomUdParserFactory.H index 2763e0f32..adc291882 100644 --- a/src/usr/scom/plugins/scomUdParserFactory.H +++ b/src/usr/scom/plugins/scomUdParserFactory.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2016,2017 */ +/* Contributors Listed Below - COPYRIGHT 2016,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -27,6 +27,7 @@ #include "errludparserfactory.H" #include "errludP_scom.H" +#include "errludP_cache.H" namespace SCOM { @@ -37,7 +38,10 @@ namespace SCOM UserDetailsParserFactory() { registerParser<SCOM::UdParserPib> - (SCOM_UDT_PIB); + (SCOM_UDT_PIB); + registerParser< + ::SECUREBOOT::CENTAUR_SECURITY::UdParserCentaurCacheMismatch> + (SCOM_UDT_CENTAUR_CACHE_MISMATCH); } |

