gpt: check alternate_lba valid [1/1]
PD#SWPL-157700
Problem:
check alternate_lba valid
Solution:
check alternate_lba valid
if not, reset it
Verify:
local
Change-Id: I2d7b74d3e2870cd25b0bd8f12d24ee9ea5d378a7
Signed-off-by: Xindong Xu <xindong.xu@amlogic.com>
diff --git a/disk/part_efi.c b/disk/part_efi.c
index deb0d19..233c4cd 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -1002,7 +1002,7 @@
if (le64_to_cpu(gpt_h->alternate_lba) > dev_desc->lba ||
le64_to_cpu(gpt_h->alternate_lba) == 0) {
printf("GPT: alternate_lba: %llX, " LBAF ", reset it\n",
- le64_to_cpu(gpt_h->last_usable_lba), dev_desc->lba);
+ le64_to_cpu(gpt_h->alternate_lba), dev_desc->lba);
gpt_h->alternate_lba = cpu_to_le64(dev_desc->lba - 1);
flag = true;
alternate_flag = true;
@@ -1037,6 +1037,13 @@
printf("gpt_e[%d].ending_lba: %llX \n", i, gpt_e[i].ending_lba);
flag = true;
}
+
+ if (le64_to_cpu(gpt_h->alternate_lba) > le64_to_cpu(gpt_e[i].starting_lba) &&
+ le64_to_cpu(gpt_h->alternate_lba) < le64_to_cpu(gpt_e[i].ending_lba)) {
+ printf("%s: alternate_lba: %llX during part %d, invalid, reset it\n",
+ __func__, le64_to_cpu(gpt_h->alternate_lba), i);
+ gpt_h->alternate_lba = gpt_e[1].starting_lba - 1;
+ }
}
if (flag) {