blob: 4760e65a53c3f5f8e4b21d95654e0749617e71b6 [file] [log] [blame]
*** Settings ***
Documentation Secure boot related test cases.
# Test Parameters:
# SEL to PEL conversion:
# https://github.com/openbmc/openbmc-test-automation/blob/master/docs/
# openbmc_test_tools.md#converting-sels-to-readable-format
Resource ../../lib/utils.robot
Resource ../../lib/state_manager.robot
Resource ../../lib/boot_utils.robot
Resource ../../lib/secure_utils.robot
Resource ../../lib/open_power_utils.robot
Resource ../../lib/logging_utils.robot
Resource ../../lib/openbmc_ffdc_methods.robot
Library ../../lib/gen_misc.py
Suite Setup Suite Setup Execution
Test Setup Test Setup Execution
Test Teardown Test Teardown Execution
*** Variables ***
${security_access_bit_mask} ${0xC000000000000000}
# TODO: will enable this in next commit
#${pnor_corruption_rc} SECUREBOOT::RC_ROM_VERIFY
${pnor_corruption_rc} 0x1E07
${bmc_image_dir_path} /usr/local/share/pnor
${bmc_guard_part_path} /var/lib/phosphor-software-manager/pnor/prsv/GUARD
*** Test Cases ***
# All the test cases requires by default jumpers to be positioned
# between 1 & 2. If this is not met test cases would fail
# TODO:https://github.com/openbmc/openbmc-test-automation/issues/1644
Validate Secure Cold Boot With TPM Policy Disabled
[Documentation] Validate secure cold boot with TPM policy disabled.
[Tags] Validate_Secure_Cold_Boot_With_TPM_Policy_Disabled
Validate Secure Boot With TPM Policy Enabled Or Disabled ${0}
Validate Secure Cold Boot With TPM Policy Enabled
[Documentation] Validate secure cold boot with TPM policy enabled.
[Tags] Validate_Secure_Cold_Boot_With_TPM_Policy_Enabled
Validate Secure Boot With TPM Policy Enabled Or Disabled ${1}
Secure Boot Violation Using Corrupt SBE Image On Cold Boot
[Documentation] Secure boot violation using corrupt SBE image on cold boot.
[Tags] Secure_Boot_Violation_Using_Corrupt_SBE_Image_On_Cold_Boot
Violate Secure Boot Using Corrupt Image
... SBE ${pnor_corruption_rc} ${bmc_image_dir_path}
*** Keywords ***
Violate Secure Boot Using Corrupt Image
[Documentation] Cause secure boot violation during cold boot
... with corrupted image.
[Arguments] ${partition} ${error_rc} ${bmc_image_dir_path}
# Description of argument(s):
# partition The partition which is to be corrupted
# (e.g. "SBE", "HBI", "HBB", "HBRT", "HBBL", "OCC").
# error_rc The RC that is expected as a
# result of the secure boot violation
# (e.g. "SECUREBOOT::RC_ROM_VERIFY").
# bmc_image_dir_path BMC image path.
Set And Verify TPM Policy ${1}
# Descipiton:
# Cause a secure boot violation by copying an BMC image file to the
# target BMC and then starting a power on.
# This action should result in:
# 1) an error log entry
# 2) the system going to "Quiesced" state.
# Load corrupted image to /usr/local/share/pnor.
Open Connection For SCP
Log ${bmc_image_dir_path}
Log ${error_rc}
scp.Put File
... ${EXEC_DIR}/data/pnor_test_data/${partition} ${bmc_image_dir_path}
${error_log_path}= Catenate ${SB_LOG_DIR_PATH}/partition-corruption
Create Directory ${error_log_path}
Set Global Variable ${error_log_path}
Log ${error_log_path}
# Starting a power on.
# TODO: Need to move to REST Power On. Needs more testing.
BMC Execute Command /usr/sbin/obmcutil poweron
Wait Until Keyword Succeeds 15 min 15 sec Error Logs Should Exist
# TODO: This will be enabled little later as more tesing required
# Wait Until Keyword Succeeds
# ... 5 min 5 sec Collect Error Logs and Verify SRC ${error_rc} ${error_log_path}
# Verify the RC 0x1E07 in the SOL logs.
Get And Verify Partition Corruption ${sol_log_file_path}
# Remove the file from /usr/local/share/pnor/.
BMC Execute Command rm -rf ${bmc_image_dir_path}*
# Check if system reaches quiesce state.
Run Keywords
... Wait Until Keyword Succeeds 3 min 5 sec Is Host Quiesced AND
... Recover Quiesced Host
Collect Error Logs and Verify SRC
[Documentation] Verify error log entry & signature description.
[Arguments] ${error_rc} ${log_prefix}
# Description of argument(s):
# error_rc Error log signature description.
# log_prefix Log path prefix.
Error Logs Should Not Exist
Collect eSEL Log ${log_prefix}
${error_log_file_path}= Catenate ${log_prefix}esel.txt
${rc} ${output}= Run and Return RC and Output
... grep -i ${error_rc} ${error_log_file_path}
Should Be Equal ${rc} ${0}
Should Not Be Empty ${output}
Get And Verify Security Access Bit
[Documentation] Get and verify security access bit.
[Arguments] ${sol_log_file_path}
# Description of argument(s):
# sol_log_file_path The path to the file containing SOL data
# which was collected during a REST Power On.
# Sample output:
# 19.68481|SECURE|Security Access Bit> 0xC000000000000000
${cmd}= Catenate
... grep "Security Access Bit" ${sol_log_file_path} | awk '{ print $4 }'
${rc} ${security_access_bit_str}= Run and Return RC and Output ${cmd}
Should Be Equal ${rc} ${0}
... msg=Return code from ${cmd} not zero.
# Verify the value of "Security Access Bit".
# If fails, probable issue is Jumper position.
${security_access_bit}= Convert to Integer ${security_access_bit_str}
${result}= Evaluate ${security_access_bit_mask} & ${security_access_bit}
Should Be Equal ${result} ${security_access_bit_mask}
... msg=System is not booted in secure mode. values=False
Get And Verify Partition Corruption
[Documentation] Get and verify partition corruption.
[Arguments] ${sol_log_file_path}
# Description of argument(s):
# sol_log_file_path The path to the file containing SOL data
# which was collected during a REST Power On.
# Sample output:
# 44.47498|secure|Secureboot Failure plid = 0x90000007, rc = 0x1E07
${cmd}= Catenate
... grep -i "Secureboot Failure" ${sol_log_file_path} | awk '{ print $8 }'
${rc} ${corruption_rc_str}= Run and Return RC and Output ${cmd}
Should Be Equal ${rc} ${0}
... msg=Return code from ${cmd} not zero.
# Verify the RC 0x1E07 from sol output".
Should Be Equal As Strings ${corruption_rc_str} ${pnor_corruption_rc}
... msg=SB violation due to PNOR partition corruption not reported. values=False
Validate Secure Boot With TPM Policy Enabled Or Disabled
[Documentation] Validate secure boot with TPM policy enabled or disabled.
[Arguments] ${tpm_policy}
# Description of argument(s):
# tpm_policy Enable-0 or Disable-1.
Set And Verify TPM Policy ${tpm_policy}
REST Power On quiet=1
Validate Secure Boot ${sol_log_file_path}
Validate Secure Boot
[Documentation] Validate secure boot.
[Arguments] ${sol_log_file_path}
# Description of argument(s):
# sol_log_file_path The path to the file containing SOL data
# which was collected during a REST Power On.
Get And Verify Security Access Bit ${sol_log_file_path}
Error Logs Should Not Exist
REST Verify No Gard Records
Suite Setup Execution
[Documentation] Suite Setup Execution.
${bmc_image_dir_path}= Add Trailing Slash ${bmc_image_dir_path}
${SB_LOG_DIR_PATH}= Catenate ${EXECDIR}/SB_logs/
Set Suite Variable ${SB_LOG_DIR_PATH}
Create Directory ${SB_LOG_DIR_PATH}
Empty Directory ${SB_LOG_DIR_PATH}
Set Global Variable ${bmc_image_dir_path}
Log ${bmc_image_dir_path}
BMC Execute Command rm -rf ${bmc_image_dir_path}*
Set Global Variable ${bmc_guard_part_path}
Log ${bmc_guard_part_path}
BMC Execute Command rm -rf ${bmc_guard_part_path}
Test Setup Execution
[Documentation] Test setup execution.
${timestamp}= Get Current Date result_format=%Y%m%d%H%M%S
${sol_log_file_path}= Catenate ${EXECDIR}/Secure_SOL${timestamp}
Start SOL Console Logging ${sol_log_file_path}
Set Suite Variable ${sol_log_file_path}
REST Power Off stack_mode=skip quiet=1
Delete Error Logs And Verify
Test Teardown Execution
[Documentation] Test teardown execution.
Stop SOL Console Logging
Run rm -rf ${sol_log_file_path}
# Removing the corrupted file from BMC.
BMC Execute Command rm -rf ${bmc_image_dir_path}*