Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(542)

Unified Diff: cgpt/cgpt_common.c

Issue 5115002: Fixing the bug of CGPT when primary entry table is invalid. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/vboot_reference.git
Patch Set: Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | cgpt/cmd_add.c » ('j') | cgpt/cmd_add.c » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cgpt/cgpt_common.c
diff --git a/cgpt/cgpt_common.c b/cgpt/cgpt_common.c
index 4b9a5a141dce0b847ab7a4b58549a241c26f9fed..ce36028d44e4d6aab081b0235777036cc51540c6 100644
--- a/cgpt/cgpt_common.c
+++ b/cgpt/cgpt_common.c
@@ -480,8 +480,16 @@ GptEntry *GetEntry(GptData *gpt, int secondary, uint32_t entry_index) {
if (secondary == PRIMARY) {
entries = gpt->primary_entries;
- } else {
+ } else if (secondary == SECONDARY) {
entries = gpt->secondary_entries;
+ } else { /* ANY_VALID */
+ require(ANY_VALID);
Bill Richardson 2010/11/17 18:06:24 'require' is just 'assert' that doesn't compile aw
Louis 2010/11/18 01:51:29 This is a typo. Should be "require(secondary==ANY_
+ if (gpt->valid_entries & MASK_PRIMARY) {
+ entries = gpt->primary_entries;
+ } else {
+ require(gpt->valid_entries & MASK_SECONDARY);
+ entries = gpt->secondary_entries;
+ }
}
return (GptEntry*)(&entries[stride * entry_index]);
@@ -570,12 +578,12 @@ void UpdateCrc(GptData *gpt) {
if (gpt->modified & GPT_MODIFIED_HEADER1) {
primary_header->header_crc32 = 0;
primary_header->header_crc32 = Crc32(
- (const uint8_t *)primary_header, primary_header->size);
+ (const uint8_t *)primary_header, sizeof(GptHeader));
}
if (gpt->modified & GPT_MODIFIED_HEADER2) {
secondary_header->header_crc32 = 0;
secondary_header->header_crc32 = Crc32(
- (const uint8_t *)secondary_header, secondary_header->size);
+ (const uint8_t *)secondary_header, sizeof(GptHeader));
}
}
/* Two headers are NOT bitwise identical. For example, my_lba pointers to header
@@ -662,14 +670,14 @@ uint8_t RepairHeader(GptData *gpt, const uint32_t valid_headers) {
return GPT_MODIFIED_HEADER2;
}
} else if (valid_headers == MASK_PRIMARY) {
- memcpy(secondary_header, primary_header, primary_header->size);
+ memcpy(secondary_header, primary_header, sizeof(GptHeader));
secondary_header->my_lba = gpt->drive_sectors - 1; /* the last sector */
secondary_header->alternate_lba = primary_header->my_lba;
secondary_header->entries_lba = secondary_header->my_lba -
GPT_ENTRIES_SECTORS;
return GPT_MODIFIED_HEADER2;
} else if (valid_headers == MASK_SECONDARY) {
- memcpy(primary_header, secondary_header, secondary_header->size);
+ memcpy(primary_header, secondary_header, sizeof(GptHeader));
primary_header->my_lba = GPT_PMBR_SECTOR; /* the second sector on drive */
primary_header->alternate_lba = secondary_header->my_lba;
primary_header->entries_lba = primary_header->my_lba + GPT_HEADER_SECTOR;
@@ -693,4 +701,3 @@ void PMBRToStr(struct pmbr *pmbr, char *str, unsigned int buflen) {
require(snprintf(str, buflen, "PMBR (Boot GUID: %s)", buf) < buflen);
}
}
-
« no previous file with comments | « no previous file | cgpt/cmd_add.c » ('j') | cgpt/cmd_add.c » ('J')

Powered by Google App Engine
This is Rietveld 408576698