diff options
author | Patrick Georgi <pgeorgi@google.com> | 2016-08-02 17:07:58 +0200 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-08-03 07:06:32 -0700 |
commit | 46b77fb2f04941c869c3a98cd17e9209c36b2917 (patch) | |
tree | 85f9186209e40dfb941e76b051508978ea3e6be5 | |
parent | 16cacfa043c6153843873467ad4fc510b9fbcf44 (diff) | |
download | vboot-46b77fb2f04941c869c3a98cd17e9209c36b2917.tar.gz |
cgptlib: cast 32bit to 64bit before multiplication
Coverity noted that multiplying two 32bit values happens in 32bit, while
the result is to be stored in an uint64_t.
BUG=none
BRANCH=none
TEST=none
Found-by: Coverity Scan #1353032, #1353033, 1353034
Change-Id: I8d0c5fe4feee066a81e8904c525dc836dd7a4fc6
Signed-off-by: Patrick Georgi <pgeorgi@google.com>
Reviewed-on: https://chromium-review.googlesource.com/365391
Commit-Ready: Patrick Georgi <pgeorgi@chromium.org>
Tested-by: Patrick Georgi <pgeorgi@chromium.org>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r-- | firmware/lib/gpt_misc.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/firmware/lib/gpt_misc.c b/firmware/lib/gpt_misc.c index 0bf09401..c9b71701 100644 --- a/firmware/lib/gpt_misc.c +++ b/firmware/lib/gpt_misc.c @@ -57,7 +57,8 @@ int AllocAndReadGptData(VbExDiskHandle_t disk_handle, GptData *gptdata) gptdata->gpt_drive_sectors, gptdata->flags)) { primary_valid = 1; - uint64_t entries_bytes = primary_header->number_of_entries + uint64_t entries_bytes = + (uint64_t)primary_header->number_of_entries * primary_header->size_of_entry; uint64_t entries_sectors = entries_bytes / gptdata->sector_bytes; @@ -90,7 +91,8 @@ int AllocAndReadGptData(VbExDiskHandle_t disk_handle, GptData *gptdata) gptdata->gpt_drive_sectors, gptdata->flags)) { secondary_valid = 1; - uint64_t entries_bytes = secondary_header->number_of_entries + uint64_t entries_bytes = + (uint64_t)secondary_header->number_of_entries * secondary_header->size_of_entry; uint64_t entries_sectors = entries_bytes / gptdata->sector_bytes; @@ -122,7 +124,8 @@ int WriteAndFreeGptData(VbExDiskHandle_t disk_handle, GptData *gptdata) { int skip_primary = 0; GptHeader *header = (GptHeader *)gptdata->primary_header; - uint64_t entries_bytes = header->number_of_entries + uint64_t entries_bytes = + (uint64_t)header->number_of_entries * header->size_of_entry; uint64_t entries_sectors = entries_bytes / gptdata->sector_bytes; int ret = 1; |