diff options
author | Ilya Smirnov <ismirno@us.ibm.com> | 2018-03-19 17:12:32 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-04-09 16:29:14 -0400 |
commit | da8911ce095aa7d18231c9d344dc978dae7cf984 (patch) | |
tree | bba30d639c013bdd5f77cf70a31fc560f8c33698 /src | |
parent | 5192636a15d9fd36653952eaad5dac0974094f00 (diff) | |
download | talos-hostboot-da8911ce095aa7d18231c9d344dc978dae7cf984.tar.gz talos-hostboot-da8911ce095aa7d18231c9d344dc978dae7cf984.zip |
Secure Boot: Support Phyp debug flag in HDAT
PHYP needs a way to know if SBE security backdoor is enabled
for debug purposes. This change creates a flag in TPM instance
data structure to indicate whether the backdoor is enabled. This
flag is passed by SBE to the hb bootloader; also added the flag
to indicate whether PCR is poisoned (default of 0).
The population of this flag will be implemented on Fleetwood.
Change-Id: I22305dbc9651134ba7dfe3b0bd3c760fe53c2c85
RTC: 188961
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/56045
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: Nicholas E. Bofferding <bofferdn@us.ibm.com>
Reviewed-by: Michael Baiocchi <mbaiocch@us.ibm.com>
CI-Ready: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/bootloader/bootloader.C | 11 | ||||
-rw-r--r-- | src/build/debug/Hostboot/BlData.pm | 4 | ||||
-rw-r--r-- | src/include/bootloader/bootloader_data.H | 4 | ||||
-rw-r--r-- | src/include/bootloader/bootloaderif.H | 8 | ||||
-rw-r--r-- | src/include/kernel/bltohbdatamgr.H | 9 | ||||
-rw-r--r-- | src/include/usr/secureboot/service.H | 6 | ||||
-rw-r--r-- | src/kernel/bltohbdatamgr.C | 10 | ||||
-rw-r--r-- | src/usr/hdat/hdattpmdata.H | 14 | ||||
-rw-r--r-- | src/usr/runtime/populate_hbruntime.C | 12 | ||||
-rw-r--r-- | src/usr/secureboot/base/service.C | 19 |
10 files changed, 86 insertions, 11 deletions
diff --git a/src/bootloader/bootloader.C b/src/bootloader/bootloader.C index 3fe6cd7b9..eed79770d 100644 --- a/src/bootloader/bootloader.C +++ b/src/bootloader/bootloader.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2017 */ +/* Contributors Listed Below - COPYRIGHT 2015,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -85,6 +85,12 @@ namespace Bootloader{ l_blConfigData->secureSettings.allowAttrOverrides; } + if(l_blConfigData->version >= SBE_BACKDOOR_BIT_ADDED) + { + g_blData->blToHbData.secBackdoorBit = + l_blConfigData->secureSettings.secBackdoorBit; + } + // Find secure ROM addr // Get starting address of ROM size and code which is the next 8 byte // aligned address after the bootloader end. @@ -113,6 +119,9 @@ namespace Bootloader{ case ADDR_STASH_SUPPORT_ADDED: g_blData->blToHbData.version = BLTOHB_KEYADDR; break; + case SBE_BACKDOOR_BIT_ADDED: + g_blData->blToHbData.version = BLTOHB_BACKDOOR; + break; default: g_blData->blToHbData.version = BLTOHB_SIZE; break; diff --git a/src/build/debug/Hostboot/BlData.pm b/src/build/debug/Hostboot/BlData.pm index 0a4b91329..b196e2ece 100644 --- a/src/build/debug/Hostboot/BlData.pm +++ b/src/build/debug/Hostboot/BlData.pm @@ -5,7 +5,7 @@ # # OpenPOWER HostBoot Project # -# Contributors Listed Below - COPYRIGHT 2017 +# Contributors Listed Below - COPYRIGHT 2017,2018 # [+] International Business Machines Corp. # # @@ -208,7 +208,7 @@ sub main my $blToHbAddr = $dataAddr + $dataOffset; my $blToHbAddrStr = sprintf("0x%08X", $blToHbAddr); - my $blToHbSize = 171; + my $blToHbSize = 172; my $blToHb = ::readData($blToHbAddr,$blToHbSize); my $blToHbData = formatData($blToHb); $dataOffset += ::alignUp($blToHbSize, 16); diff --git a/src/include/bootloader/bootloader_data.H b/src/include/bootloader/bootloader_data.H index 2e302c20a..9a545304b 100644 --- a/src/include/bootloader/bootloader_data.H +++ b/src/include/bootloader/bootloader_data.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2017 */ +/* Contributors Listed Below - COPYRIGHT 2017,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -91,7 +91,7 @@ namespace Bootloader{ // Object that will be stored where the SBE HB structure indicates BlToHbData blToHbData; uint8_t bl_reserved5[(512 - sizeof(BlToHbData)) % 16]; - static_assert( sizeof(BlToHbData) == 171, "BlToHbData " + static_assert( sizeof(BlToHbData) == 172, "BlToHbData " "size changed. Check bootloader_data.H alignment. " "Fix BlData.pm processing."); } blData_t; diff --git a/src/include/bootloader/bootloaderif.H b/src/include/bootloader/bootloaderif.H index 38b155230..edb8a676e 100644 --- a/src/include/bootloader/bootloaderif.H +++ b/src/include/bootloader/bootloaderif.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2017 */ +/* Contributors Listed Below - COPYRIGHT 2017,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -74,6 +74,7 @@ enum BlToHbDataVersion BLTOHB_SECURE_OVERRIDES = 0x0000000900000004, BLTOHB_SIZE = 0x0000000900000005, BLTOHB_KEYADDR = 0x0000000900000006, + BLTOHB_BACKDOOR = 0x0000000900000007, }; enum @@ -123,7 +124,8 @@ struct BlToHbData xscomBAR(MMIO_GROUP0_CHIP0_XSCOM_BASE_ADDR), lpcBAR(MMIO_GROUP0_CHIP0_LPC_BASE_ADDR), securityOverride(0), allowAttrOverrides(0), - sizeOfStructure(0), keyAddrStashData(0) {} + sizeOfStructure(0), keyAddrStashData(0), + secBackdoorBit(0) {} // Simple way to tell if data is valid uint64_t eyeCatch; @@ -157,6 +159,8 @@ struct BlToHbData size_t sizeOfStructure; //keyAddr stash data keyAddrPair_t keyAddrStashData; + // Secure Setting - SBE Security Backdoor + bool secBackdoorBit; } __attribute__((packed)); /** diff --git a/src/include/kernel/bltohbdatamgr.H b/src/include/kernel/bltohbdatamgr.H index 6dd9d55f5..99e63aeae 100644 --- a/src/include/kernel/bltohbdatamgr.H +++ b/src/include/kernel/bltohbdatamgr.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2017 */ +/* Contributors Listed Below - COPYRIGHT 2017,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -209,6 +209,13 @@ class BlToHbDataManager * @return keyAddrPair_t Key Address Pairs Struct */ const Bootloader::keyAddrPair_t getKeyAddrPairs() const; + + /* + * @brief Returns the value of SBE security backdoor enabled bit + * + * @return bool true if enabled; false otherwise + */ + const bool getSecBackdoor() const; }; // Extern global instance of the class diff --git a/src/include/usr/secureboot/service.H b/src/include/usr/secureboot/service.H index c467c3800..cb2829147 100644 --- a/src/include/usr/secureboot/service.H +++ b/src/include/usr/secureboot/service.H @@ -334,6 +334,12 @@ namespace SECUREBOOT */ bool allowAttrOverrides(); + /* + * @brief Determines if SBE security backdoor bit is set + * @return bool TRUE if SBE security backdoor is enabled; FALSE otherwise + */ + bool getSbeSecurityBackdoor(); + /* * @brief Gets the current SBE security mode value from the secureboot * subsystem diff --git a/src/kernel/bltohbdatamgr.C b/src/kernel/bltohbdatamgr.C index a0c89b034..f777d611b 100644 --- a/src/kernel/bltohbdatamgr.C +++ b/src/kernel/bltohbdatamgr.C @@ -180,6 +180,11 @@ printk("Version=%lX\n",i_data.version); sizeof(Bootloader::keyAddrPair_t)); } + if(iv_data.version >= Bootloader::BLTOHB_BACKDOOR) + { + iv_data.secBackdoorBit = i_data.secBackdoorBit; + } + // Size of data that needs to be preserved and pinned. iv_preservedSize = ALIGN_PAGE(iv_data.secureRomSize + iv_data.hwKeysHashSize + @@ -378,3 +383,8 @@ const size_t BlToHbDataManager::getBlToHbDataSize() const return iv_data.sizeOfStructure; } +const bool BlToHbDataManager::getSecBackdoor() const +{ + return iv_data.secBackdoorBit; +} + diff --git a/src/usr/hdat/hdattpmdata.H b/src/usr/hdat/hdattpmdata.H index f04403e1e..8bb07bcf5 100644 --- a/src/usr/hdat/hdattpmdata.H +++ b/src/usr/hdat/hdattpmdata.H @@ -86,6 +86,17 @@ struct hdatTpmData_t } __attribute__ ((packed)); /** + * @brief Structure definition for TPM Configuration Flags + * + */ +struct hdatTpmConfigFlags_t +{ + uint8_t pcrPoisonedFlag : 1; // Intentionally break remote attestation + // of this TPM + uint8_t reserved : 7; +} __attribute__ ((packed)); + +/** * @brief Structure definition for Secureboot TPM Instance Info */ struct hdatSbTpmInstInfo_t @@ -97,7 +108,8 @@ struct hdatSbTpmInstInfo_t uint8_t hdatLocality3Addr; uint8_t hdatLocality4Addr; uint8_t hdatFunctionalStatus; - uint8_t reserved[3]; + struct hdatTpmConfigFlags_t hdatTpmConfigFlags; + uint8_t reserved[2]; uint32_t hdatTpmSrtmEventLogOffset; uint32_t hdatTpmSrtmEventLogEntrySize; uint32_t hdatTpmDrtmEventLogOffset; diff --git a/src/usr/runtime/populate_hbruntime.C b/src/usr/runtime/populate_hbruntime.C index 1f59a8d43..1554633ae 100644 --- a/src/usr/runtime/populate_hbruntime.C +++ b/src/usr/runtime/populate_hbruntime.C @@ -1430,7 +1430,11 @@ errlHndl_t populate_hbSecurebootData ( void ) uint16_t secureboot : 1; // bit 1: Measurements Extended to Secure Boot TPM uint16_t trustedboot : 1; - uint16_t reserved : 14; + // bit 2: SBE Security Backdoor bit. + // NOTE: This bit is labeled "Platform Security Overrides Allowed" + // in the section 6.1.1 of HDAT spec. + uint16_t sbeSecBackdoor : 1; + uint16_t reserved : 13; } SysSecSets; // populate system security settings in hdat @@ -1451,6 +1455,9 @@ errlHndl_t populate_hbSecurebootData ( void ) #endif l_sysSecSets->secureboot = secure? 1: 0; + // populate security override setting + l_sysSecSets->sbeSecBackdoor = SECUREBOOT::getSbeSecurityBackdoor(); + // populate TPM config bits in hdat bool tpmRequired = false; #ifdef CONFIG_TPMDD @@ -1768,6 +1775,9 @@ errlHndl_t populate_TpmInfoByNode(const uint64_t i_instance) l_tpmInstInfo->hdatFunctionalStatus = HDAT::TpmNonPresent; } + // Set TPM configuration flag + l_tpmInstInfo->hdatTpmConfigFlags.pcrPoisonedFlag = 0; + // advance the current offset to account for this tpm instance info l_currOffset += sizeof(*l_tpmInstInfo); diff --git a/src/usr/secureboot/base/service.C b/src/usr/secureboot/base/service.C index 1f5b5d83d..e5af124ab 100644 --- a/src/usr/secureboot/base/service.C +++ b/src/usr/secureboot/base/service.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2017 */ +/* Contributors Listed Below - COPYRIGHT 2013,2018 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -637,6 +637,23 @@ bool allowAttrOverrides() }; #endif +bool getSbeSecurityBackdoor() +{ + bool l_backdoorEnabled = false; + + if(g_BlToHbDataManager.getSecBackdoor()) + { + l_backdoorEnabled = true; + SB_INF("getSbeSecurityBackdoor: SBE Security Backdoor is enabled."); + } + else + { + l_backdoorEnabled = false; + SB_INF("getSbeSecurityBackdoor: SBE Security Backdoor is disabled."); + } + return l_backdoorEnabled; +} + uint8_t getSbeSecurityMode() { return g_sbeSecurityMode; |