summaryrefslogtreecommitdiff
path: root/tests/vb2_common_tests.c
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2014-10-23 17:04:03 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-10-29 22:23:43 +0000
commitf6cfb974ce465cf977490fe26db9c8735da97571 (patch)
tree2de99fe91415267d6020d56ac28fc6c79d4e5d2c /tests/vb2_common_tests.c
parent7c2beb08380410ca6847abdac23e11ded2d1b625 (diff)
downloadvboot-f6cfb974ce465cf977490fe26db9c8735da97571.tar.gz
vboot2: Add verification for common vb2 struct header
All new-style structs have a common header. This adds a verification function for that common header, and tests for it. BUG=chromium:423882 BRANCH=none TEST=VBOOT2=1 make runtests Change-Id: I668486e77f7200c10b43aa2d17b4dd6639e5538e Signed-off-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/225459 Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Diffstat (limited to 'tests/vb2_common_tests.c')
-rw-r--r--tests/vb2_common_tests.c46
1 files changed, 45 insertions, 1 deletions
diff --git a/tests/vb2_common_tests.c b/tests/vb2_common_tests.c
index c70de2ea..5a8cb202 100644
--- a/tests/vb2_common_tests.c
+++ b/tests/vb2_common_tests.c
@@ -228,18 +228,62 @@ static void test_helper_functions(void)
TEST_EQ(vb2_verify_member_inside(p, 20, p, 4, 4, 17),
VB2_ERROR_INSIDE_DATA_OUTSIDE,
"MemberInside data too big");
+ TEST_EQ(vb2_verify_member_inside(p, 20, p, 8, 4, 8),
+ VB2_ERROR_INSIDE_DATA_OVERLAP,
+ "MemberInside data overlaps member");
TEST_EQ(vb2_verify_member_inside(p, -8, p, 12, 0, 0),
VB2_ERROR_INSIDE_PARENT_WRAPS,
"MemberInside wraparound 1");
TEST_EQ(vb2_verify_member_inside(p, 20, p, -8, 0, 0),
VB2_ERROR_INSIDE_MEMBER_WRAPS,
"MemberInside wraparound 2");
- TEST_EQ(vb2_verify_member_inside(p, 20, p, 4, 0, -8),
+ TEST_EQ(vb2_verify_member_inside(p, 20, p, 4, 4, -12),
VB2_ERROR_INSIDE_DATA_WRAPS,
"MemberInside wraparound 3");
}
{
+ uint8_t cbuf[sizeof(struct vb2_struct_common) + 128];
+ struct vb2_struct_common *c = (struct vb2_struct_common *)cbuf;
+
+ c->desc_offset = sizeof(*c);
+ c->desc_size = 128;
+ cbuf[sizeof(cbuf) - 1] = 0;
+ TEST_SUCC(vb2_verify_common_header(cbuf, sizeof(cbuf), c),
+ "CommonInside at start");
+
+ c[1].desc_offset = sizeof(*c);
+ c[1].desc_size = 128 - sizeof(*c);
+ TEST_SUCC(vb2_verify_common_header(cbuf, sizeof(cbuf), c + 1),
+ "CommonInside after start");
+
+ TEST_EQ(vb2_verify_common_header(cbuf, sizeof(cbuf) - 1, c),
+ VB2_ERROR_INSIDE_DATA_OUTSIDE,
+ "CommonInside key too big");
+
+ c->desc_offset = sizeof(cbuf);
+ TEST_EQ(vb2_verify_common_header(cbuf, sizeof(cbuf), c),
+ VB2_ERROR_INSIDE_DATA_OUTSIDE,
+ "CommonInside offset too big");
+ c->desc_offset = sizeof(*c);
+
+ cbuf[sizeof(cbuf) - 1] = 1;
+ TEST_EQ(vb2_verify_common_header(cbuf, sizeof(cbuf), c),
+ VB2_ERROR_DESC_TERMINATOR,
+ "CommonInside description not terminated");
+
+ c->desc_size = 0;
+ c->desc_offset = 0;
+ TEST_SUCC(vb2_verify_common_header(cbuf, sizeof(cbuf), c),
+ "CommonInside no description");
+
+ c->desc_offset = 4;
+ TEST_EQ(vb2_verify_common_header(cbuf, sizeof(cbuf), c),
+ VB2_ERROR_DESC_EMPTY_OFFSET,
+ "CommonInside description empty offset");
+ }
+
+ {
struct vb2_packed_key k = {.key_offset = sizeof(k),
.key_size = 128};
TEST_SUCC(vb2_verify_packed_key_inside(&k, sizeof(k)+128, &k),