Skip to content

Commit 99aa6b7

Browse files
committed
checksum
1 parent 8d2d8e3 commit 99aa6b7

1 file changed

Lines changed: 23 additions & 5 deletions

File tree

tools/bootimg.c

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -620,12 +620,16 @@ int extract_kernel(const char *bootimg_path) {
620620
return -2;
621621
}
622622

623-
uint32_t kernel_offset = hdr.page_size;
623+
uint32_t page_size = hdr.page_size;
624+
uint32_t kernel_offset = page_size; // Kernel starts after the first page
624625
if (hdr.unused[0] >= 3) {
625626
kernel_offset = 4096;
626627
}
628+
if (hdr.unused[0] > 10) {
629+
kernel_offset = page_size;
630+
}
627631

628-
tools_logi("Kernel size: %d, Offset: %d\n", hdr.kernel_size, kernel_offset);
632+
tools_logi("Kernel size: %d,Header Version: %d, Offset: %d\n", hdr.kernel_size, hdr.unused[0], kernel_offset);
629633

630634
uint8_t *kernel_data = malloc(hdr.kernel_size);
631635
if (!kernel_data) {
@@ -687,6 +691,7 @@ int repack_bootimg(const char *orig_boot_path,
687691

688692
struct boot_img_hdr hdr;
689693
struct avb_footer avb;
694+
uint32_t extracted_size = 0;
690695
fread(&hdr, sizeof(hdr), 1, f_orig);
691696

692697
if (memcmp(hdr.magic, "ANDROID!", 8) != 0) {
@@ -705,6 +710,7 @@ int repack_bootimg(const char *orig_boot_path,
705710
fread(&avb, sizeof(avb), 1, f_orig);
706711

707712
uint32_t header_ver = hdr.unused[0];
713+
if (header_ver > 10){header_ver = 0;extracted_size = hdr.unused[0];}
708714
//if (header_ver == 0){tools_loge_exit("we don't support this device any more\n");}
709715
uint32_t page_size = (header_ver >= 3) ? 4096 : hdr.page_size;
710716
uint32_t fmt_size = (header_ver >= 3) ? hdr.kernel_addr : hdr.ramdisk_size;
@@ -812,7 +818,6 @@ int repack_bootimg(const char *orig_boot_path,
812818
uint32_t rest_data_size = (total_size > rest_data_offset) ? (total_size - rest_data_offset) : 0;
813819
hdr.kernel_size = final_k_size + dtb_size;
814820
uint32_t checksum_aligned = ALIGN(fmt_size , page_size);
815-
816821
uint8_t *rest_buf = NULL;
817822
if (rest_data_size > 0) {
818823
rest_buf = malloc(rest_data_size);
@@ -841,6 +846,12 @@ int repack_bootimg(const char *orig_boot_path,
841846
checksum_aligned += ALIGN(hdr.second_size , page_size);
842847
}
843848
//to do extra data
849+
if (extracted_size) {
850+
tools_logi("extracted_size=%d\n",extracted_size);
851+
sha256_update(&ctx, (const BYTE *)rest_buf + checksum_aligned, page_size);
852+
sha256_update(&ctx, (const BYTE *)&extracted_size, 4);
853+
checksum_aligned += ALIGN(extracted_size , page_size);
854+
}
844855
if (header_ver == 1 || header_ver == 2){
845856
tools_logi("recovery_dtbo_size=%d\n",hdr.recovery_dtbo_size);
846857
sha256_update(&ctx, (const BYTE *)rest_buf + checksum_aligned, hdr.recovery_dtbo_size);
@@ -869,10 +880,17 @@ int repack_bootimg(const char *orig_boot_path,
869880
if (hdr.second_size > 0){
870881
checksum_aligned += ALIGN(hdr.second_size , page_size);
871882
}
872-
tools_logi("second_size=%d\n",hdr.second_size);
883+
tools_logi("second_size=%d,offset=%d\n",hdr.second_size, checksum_aligned+rest_data_offset);
873884
//to do extra data
885+
if (extracted_size) {
886+
tools_logi("extracted_size=%d,offset=%d\n",extracted_size, checksum_aligned+rest_data_offset);
887+
sha1_update(&ctx, (const BYTE *)rest_buf + checksum_aligned, page_size);
888+
sha1_update(&ctx, (const BYTE *)&extracted_size, 4);
889+
checksum_aligned += ALIGN(extracted_size , page_size);
890+
}
891+
874892
if (header_ver == 1 || header_ver == 2){
875-
tools_logi("recovery_dtbo_size=%d\n",hdr.recovery_dtbo_size);
893+
tools_logi("recovery_dtbo_size=%d,offset=%d\n",hdr.recovery_dtbo_size, checksum_aligned+rest_data_offset);
876894
sha1_update(&ctx, (const BYTE *)rest_buf + checksum_aligned, hdr.recovery_dtbo_size);
877895
sha1_update(&ctx, (const BYTE *)&hdr.recovery_dtbo_size, 4);
878896
checksum_aligned += ALIGN(hdr.recovery_dtbo_size , page_size);

0 commit comments

Comments
 (0)