diff options
author | Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> | 2024-04-22 20:33:19 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-04-22 20:33:19 +0000 |
commit | 901bc28475e9a188770901f07b9b286b9c5c38b2 (patch) | |
tree | a019ae6d719063a9ab004fd37b04bcba06a21300 | |
parent | 8275813a474b595a3662c4cbd8aab7530e8238d3 (diff) | |
parent | 8dd12a48fe002a47ecf144940ecbc3d23050f0a3 (diff) | |
download | u-boot-901bc28475e9a188770901f07b9b286b9c5c38b2.tar.gz |
Merge "ANDROID: fix overwrite and increase the memory gap for kernel and initramfs" into mainHEADmastermain
-rw-r--r-- | boot/android_bootloader.c | 4 | ||||
-rw-r--r-- | boot/image-android.c | 14 |
2 files changed, 13 insertions, 5 deletions
diff --git a/boot/android_bootloader.c b/boot/android_bootloader.c index f4a1ab4d0e..614d92cdb4 100644 --- a/boot/android_bootloader.c +++ b/boot/android_bootloader.c @@ -423,10 +423,10 @@ static int do_avb_verify(const char *iface, data->slot_suffix = slot_suffix; data->boot.addr = kernel_address; data->boot.size = 0; // 0 indicates that it hasn't yet been preloaded. - data->vendor_boot.addr = data->boot.addr + (packed ? boot_size : SZ_64M); + data->vendor_boot.addr = data->boot.addr + (packed ? boot_size : ALIGN(boot_size, SZ_64M)); data->vendor_boot.size = 0; if (init_boot_size != 0) { - data->init_boot.addr = data->vendor_boot.addr + (packed ? vendor_boot_size : SZ_64M); + data->init_boot.addr = data->vendor_boot.addr + (packed ? vendor_boot_size : ALIGN(vendor_boot_size, SZ_64M)); data->init_boot.size = 0; ret = avb_verify(ops, slot_suffix, out_data, out_cmdline); } else { diff --git a/boot/image-android.c b/boot/image-android.c index 3350ee1ab3..4016208cd4 100644 --- a/boot/image-android.c +++ b/boot/image-android.c @@ -289,9 +289,17 @@ static void _populate_boot_info(const struct boot_img_hdr_v4* boot_hdr, sizeof(vboot_hdr->cmdline)); boot_info->kernel_addr = (ulong)load_addr; - /* The "kernel_addr" is already aligned to 2MB */ - boot_info->vendor_ramdisk_addr = boot_info->kernel_addr + - ALIGN(boot_info->kernel_size, SZ_64M); + /* The "kernel_addr" is already aligned to 2MB. */ + if (IS_ENABLED(CONFIG_X86)) + /* + We multiple the kernel_size by 3 to let it leave + some spaces if the kernel is self-decompressed in-place. + */ + boot_info->vendor_ramdisk_addr = boot_info->kernel_addr + + ALIGN(boot_info->kernel_size, SZ_64M) * 3; + else + boot_info->vendor_ramdisk_addr = boot_info->kernel_addr + + ALIGN(boot_info->kernel_size, SZ_64M); boot_info->boot_ramdisk_addr = boot_info->vendor_ramdisk_addr + boot_info->vendor_ramdisk_size; |