summaryrefslogtreecommitdiff
path: root/tests/vboot_kernel_tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/vboot_kernel_tests.c')
-rw-r--r--tests/vboot_kernel_tests.c68
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");