summaryrefslogtreecommitdiffstats
path: root/src/usr/scom/plugins
diff options
context:
space:
mode:
authorNick Bofferding <bofferdn@us.ibm.com>2018-03-19 23:26:08 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-05-08 09:44:28 -0400
commit2fe71f4ddc13e3c730fbb7e1fcfe0d319eddc333 (patch)
tree6717b134419978a4b0836382364f98f620d1630c /src/usr/scom/plugins
parent3c2b4bf2adc3e076d7dc9e2876b64b813a799260 (diff)
downloadtalos-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.H135
-rw-r--r--src/usr/scom/plugins/scomUdParserFactory.H8
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);
}
OpenPOWER on IntegriCloud