diff options
Diffstat (limited to 'tests/vboot_kernel_tests.c')
-rw-r--r-- | tests/vboot_kernel_tests.c | 68 |
1 files changed, 32 insertions, 36 deletions
diff --git a/tests/vboot_kernel_tests.c b/tests/vboot_kernel_tests.c index afeb08d7..e4162fbf 100644 --- a/tests/vboot_kernel_tests.c +++ b/tests/vboot_kernel_tests.c @@ -13,6 +13,7 @@ #include "2secdata_struct.h" #include "cgptlib.h" #include "cgptlib_internal.h" +#include "common/boot_mode.h" #include "common/tests.h" #include "gpt.h" #include "load_kernel_fw.h" @@ -51,7 +52,6 @@ static uint8_t workbuf[VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE] static struct vb2_context *ctx; static struct vb2_shared_data *sd; static struct vb2_packed_key mock_key; -static enum vb2_boot_mode *boot_mode; /** * Reset mock data (for use before each test) @@ -115,8 +115,7 @@ static void ResetMocks(void) fwmp = (struct vb2_secdata_fwmp *)ctx->secdata_fwmp; memcpy(&fwmp->dev_key_hash, mock_digest, sizeof(fwmp->dev_key_hash)); - boot_mode = (enum vb2_boot_mode *)&ctx->boot_mode; - *boot_mode = VB2_BOOT_MODE_NORMAL; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_NORMAL); // TODO: more workbuf fields - flags, secdata_firmware @@ -340,32 +339,28 @@ static void LoadKernelTest(void) /* In dev mode, fail if hash is bad too */ ResetMocks(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); keyblock_verify_fail = 2; TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, "Fail key block dev hash"); /* But just bad sig is ok */ ResetMocks(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); keyblock_verify_fail = 1; TestLoadKernel(0, "Succeed keyblock dev sig"); TEST_EQ(sd->flags & VB2_SD_FLAG_KERNEL_SIGNED, 0, " use hash"); /* In dev mode and requiring signed kernel, fail if sig is bad */ ResetMocks(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); vb2_nv_set(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY, 1); keyblock_verify_fail = 1; TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, "Fail key block dev sig"); ResetMocks(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_OFFICIAL_ONLY; keyblock_verify_fail = 1; TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, @@ -394,8 +389,8 @@ static void LoadKernelTest(void) "Keyblock minios flag mismatch"); ResetMocks(); - ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; - *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_MANUAL_RECOVERY, + VB2_RECOVERY_RO_MANUAL); kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 | VB2_KEYBLOCK_FLAG_DEVELOPER_1 | VB2_KEYBLOCK_FLAG_MINIOS_0; @@ -403,16 +398,17 @@ static void LoadKernelTest(void) "Keyblock recdev flag mismatch"); ResetMocks(); - ctx->flags |= VB2_CONTEXT_RECOVERY_MODE; - *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_MANUAL_RECOVERY, + VB2_RECOVERY_RO_MANUAL); kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 | VB2_KEYBLOCK_FLAG_DEVELOPER_0 | VB2_KEYBLOCK_FLAG_MINIOS_0; TestLoadKernel(0, "Keyblock rec flag okay"); ResetMocks(); - ctx->flags |= VB2_CONTEXT_RECOVERY_MODE | VB2_CONTEXT_DEVELOPER_MODE; - *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_MANUAL_RECOVERY, + VB2_RECOVERY_RO_MANUAL); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 | VB2_KEYBLOCK_FLAG_DEVELOPER_0 | VB2_KEYBLOCK_FLAG_MINIOS_0; @@ -420,8 +416,9 @@ static void LoadKernelTest(void) "Keyblock rec!dev flag mismatch"); ResetMocks(); - ctx->flags |= VB2_CONTEXT_RECOVERY_MODE | VB2_CONTEXT_DEVELOPER_MODE; - *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_MANUAL_RECOVERY, + VB2_RECOVERY_RO_MANUAL); + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 | VB2_KEYBLOCK_FLAG_DEVELOPER_1 | VB2_KEYBLOCK_FLAG_MINIOS_0; @@ -429,8 +426,7 @@ static void LoadKernelTest(void) /* Check keyblock flags (dev mode + signed kernel required) */ ResetMocks(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); vb2_nv_set(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY, 1); kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 | VB2_KEYBLOCK_FLAG_DEVELOPER_0 @@ -439,8 +435,7 @@ static void LoadKernelTest(void) "Keyblock dev flag mismatch (signed kernel required)"); ResetMocks(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_OFFICIAL_ONLY; kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_1 | VB2_KEYBLOCK_FLAG_DEVELOPER_0 @@ -449,8 +444,7 @@ static void LoadKernelTest(void) "Keyblock dev flag mismatch (signed kernel required)"); ResetMocks(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_OFFICIAL_ONLY; kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_0 | VB2_KEYBLOCK_FLAG_DEVELOPER_0 @@ -459,8 +453,7 @@ static void LoadKernelTest(void) "Keyblock dev flag mismatch (signed kernel required)"); ResetMocks(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); vb2_nv_set(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY, 1); kbh.keyblock_flags = VB2_KEYBLOCK_FLAG_RECOVERY_0 | VB2_KEYBLOCK_FLAG_DEVELOPER_1 @@ -493,12 +486,13 @@ static void LoadKernelTest(void) ResetMocks(); kbh.data_key.key_version = 1; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); TestLoadKernel(0, "Key version ignored in dev mode"); ResetMocks(); kbh.data_key.key_version = 1; - *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_MANUAL_RECOVERY, + VB2_RECOVERY_RO_MANUAL); TestLoadKernel(0, "Key version ignored in rec mode"); ResetMocks(); @@ -516,18 +510,19 @@ static void LoadKernelTest(void) ResetMocks(); kph.kernel_version = 0; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); TestLoadKernel(0, "Kernel version ignored in dev mode"); ResetMocks(); kph.kernel_version = 0; - *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_MANUAL_RECOVERY, + VB2_RECOVERY_RO_MANUAL); TestLoadKernel(0, "Kernel version ignored in rec mode"); /* Check kernel version (dev mode + signed kernel required) */ ResetMocks(); kbh.data_key.key_version = 0; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); vb2_nv_set(ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY, 1); TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, "Keyblock key version checked in dev mode " @@ -535,7 +530,7 @@ static void LoadKernelTest(void) ResetMocks(); kbh.data_key.key_version = 0; - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_OFFICIAL_ONLY; TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, "Keyblock key version checked in dev mode " @@ -543,7 +538,7 @@ static void LoadKernelTest(void) /* Check developer key hash - bad */ ResetMocks(); - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); fwmp->flags |= VB2_SECDATA_FWMP_DEV_USE_KEY_HASH; fwmp->dev_key_hash[0]++; TestLoadKernel(VB2_ERROR_LK_INVALID_KERNEL_FOUND, @@ -551,14 +546,15 @@ static void LoadKernelTest(void) /* Check developer key hash - bad (recovery mode) */ ResetMocks(); - *boot_mode = VB2_BOOT_MODE_MANUAL_RECOVERY; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_MANUAL_RECOVERY, + VB2_RECOVERY_RO_MANUAL); fwmp->flags |= VB2_SECDATA_FWMP_DEV_USE_KEY_HASH; fwmp->dev_key_hash[0]++; TestLoadKernel(0, "Bad keyblock dev fwmp hash ignored in rec mode"); /* Check developer key hash - good */ ResetMocks(); - *boot_mode = VB2_BOOT_MODE_DEVELOPER; + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); fwmp->flags |= VB2_SECDATA_FWMP_DEV_USE_KEY_HASH; TestLoadKernel(0, "Good keyblock dev fwmp hash"); |