summaryrefslogtreecommitdiff
path: root/tests/vboot_kernel_tests.c
diff options
context:
space:
mode:
authorNam T. Nguyen <namnguyen@chromium.org>2014-08-22 15:01:38 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-08-28 01:17:48 +0000
commita2d72f70c18905aba25eb0971f6f601dd1fa5a60 (patch)
tree42f9be2f6fb2d9bd5fd54a7d4b31d5c0c378e381 /tests/vboot_kernel_tests.c
parentf510973497a430c1bb41d9b7e996d02fb7f7179e (diff)
downloadvboot-a2d72f70c18905aba25eb0971f6f601dd1fa5a60.tar.gz
vboot: cgpt: Refer to partition entries by entries_lba.
This CL accesses the partition entry array through its header's entries_lba value. Previously, we assume the primary entry array lies on third sector, and the secondary array lies (1 + 32) sectors from disk end. This assumption was fine, even Wikipedia assumed the same. But in order for us to support writing boot code to the third sector (as required by some Freescale board), the primary entry array must be moved to another location. Therefore, we must use "entries_lba" to locate the arrays from now on. BRANCH=none BUG=chromium:406432 TEST=unittest TEST=`cgpt create -p` and then `cgpt show`. Make sure the table header and entries are properly moved. Change-Id: Ia9008b0bb204f290b1f6240df562ce7d3a9bbff2 Reviewed-on: https://chromium-review.googlesource.com/213861 Reviewed-by: Bill Richardson <wfrichar@chromium.org> Tested-by: Bill Richardson <wfrichar@chromium.org> Commit-Queue: Nam Nguyen <namnguyen@chromium.org> Tested-by: Nam Nguyen <namnguyen@chromium.org>
Diffstat (limited to 'tests/vboot_kernel_tests.c')
-rw-r--r--tests/vboot_kernel_tests.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/tests/vboot_kernel_tests.c b/tests/vboot_kernel_tests.c
index ee164cea..935dd869 100644
--- a/tests/vboot_kernel_tests.c
+++ b/tests/vboot_kernel_tests.c
@@ -139,6 +139,14 @@ VbError_t VbExDiskRead(VbExDiskHandle_t handle, uint64_t lba_start,
/* Keep valgrind happy */
Memset(buffer, '\0', lba_count);
+ /* Fix up entries_lba in GPT header. */
+ if (lba_start == 1 || lba_start == 1024 - 1) {
+ GptHeader* h = (GptHeader*)buffer;
+ if (lba_start == 1)
+ h->entries_lba = 1 + 1;
+ else
+ h->entries_lba = (1024 - 1 - 32);
+ }
return VBERROR_SUCCESS;
}
@@ -245,8 +253,8 @@ static void ReadWriteGptTest(void)
TEST_EQ(AllocAndReadGptData(handle, &g), 0, "AllocAndRead");
TEST_CALLS("VbExDiskRead(h, 1, 1)\n"
"VbExDiskRead(h, 2, 32)\n"
- "VbExDiskRead(h, 991, 32)\n"
- "VbExDiskRead(h, 1023, 1)\n");
+ "VbExDiskRead(h, 1023, 1)\n"
+ "VbExDiskRead(h, 991, 32)\n");
ResetCallLog();
/*
* Valgrind complains about access to uninitialized memory here, so
@@ -262,6 +270,8 @@ static void ReadWriteGptTest(void)
g.modified |= GPT_MODIFIED_HEADER1 | GPT_MODIFIED_ENTRIES1;
ResetCallLog();
Memset(g.primary_header, '\0', g.sector_bytes);
+ h = (GptHeader*)g.primary_header;
+ h->entries_lba = 2;
TEST_EQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree mod 1");
TEST_CALLS("VbExDiskWrite(h, 1, 1)\n"
"VbExDiskWrite(h, 2, 32)\n");
@@ -272,11 +282,15 @@ static void ReadWriteGptTest(void)
g.modified = -1;
ResetCallLog();
Memset(g.primary_header, '\0', g.sector_bytes);
+ h = (GptHeader*)g.primary_header;
+ h->entries_lba = 2;
+ h = (GptHeader*)g.secondary_header;
+ h->entries_lba = 991;
TEST_EQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree mod all");
TEST_CALLS("VbExDiskWrite(h, 1, 1)\n"
"VbExDiskWrite(h, 2, 32)\n"
- "VbExDiskWrite(h, 991, 32)\n"
- "VbExDiskWrite(h, 1023, 1)\n");
+ "VbExDiskWrite(h, 1023, 1)\n"
+ "VbExDiskWrite(h, 991, 32)\n");
/* If legacy signature, don't modify GPT header/entries 1 */
ResetMocks();
@@ -286,8 +300,8 @@ static void ReadWriteGptTest(void)
g.modified = -1;
ResetCallLog();
TEST_EQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree mod all");
- TEST_CALLS("VbExDiskWrite(h, 991, 32)\n"
- "VbExDiskWrite(h, 1023, 1)\n");
+ TEST_CALLS("VbExDiskWrite(h, 1023, 1)\n"
+ "VbExDiskWrite(h, 991, 32)\n");
/* Error reading */
ResetMocks();
@@ -327,6 +341,8 @@ static void ReadWriteGptTest(void)
AllocAndReadGptData(handle, &g);
g.modified = -1;
Memset(g.primary_header, '\0', g.sector_bytes);
+ h = (GptHeader*)g.primary_header;
+ h->entries_lba = 2;
TEST_NEQ(WriteAndFreeGptData(handle, &g), 0, "WriteAndFree disk fail");
ResetMocks();