diff mbox series

boot: android: fix booting without a ramdisk

Message ID 20240726230035.2339680-1-mwalle@kernel.org
State Superseded, archived
Delegated to: Mattijs Korpershoek
Headers show
Series boot: android: fix booting without a ramdisk | expand

Commit Message

Michael Walle July 26, 2024, 11 p.m. UTC
android_image_get_ramdisk() will return an error if there is no ramdisk.
Using the android image without a ramdisk worked until commit
1ce8e10f3b4b ("image: Fix up ANDROID_BOOT_IMAGE ramdisk code") because
that return code wasn't checked. Now that it is checked, don't return an
error in the (valid) case that there is no ramdisk in the image.

With this, I'm able to boot a linux kernel using fastboot again:

  fastboot --base 0x41000000 --header-version 2 --dtb /path/to/dtb \
  --cmdline "root=/dev/mmcblk0p1 rootwait" boot path/to/Image

Signed-off-by: Michael Walle <mwalle@kernel.org>
---
 boot/image-android.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Simon Glass July 28, 2024, 7:36 p.m. UTC | #1
Hi Michael,

On Fri, 26 Jul 2024 at 17:00, Michael Walle <mwalle@kernel.org> wrote:
>
> android_image_get_ramdisk() will return an error if there is no ramdisk.
> Using the android image without a ramdisk worked until commit
> 1ce8e10f3b4b ("image: Fix up ANDROID_BOOT_IMAGE ramdisk code") because
> that return code wasn't checked. Now that it is checked, don't return an
> error in the (valid) case that there is no ramdisk in the image.
>
> With this, I'm able to boot a linux kernel using fastboot again:
>
>   fastboot --base 0x41000000 --header-version 2 --dtb /path/to/dtb \
>   --cmdline "root=/dev/mmcblk0p1 rootwait" boot path/to/Image
>
> Signed-off-by: Michael Walle <mwalle@kernel.org>
> ---
>  boot/image-android.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/boot/image-android.c b/boot/image-android.c
> index 09c7a44e058..0900579ee8c 100644
> --- a/boot/image-android.c
> +++ b/boot/image-android.c
> @@ -395,7 +395,7 @@ int android_image_get_ramdisk(const void *hdr, const void *vendor_boot_img,
>
>         if (!img_data.ramdisk_size) {
>                 *rd_data = *rd_len = 0;
> -               return -1;
> +               return 0;
>         }
>         if (img_data.header_version > 2) {
>                 ramdisk_ptr = img_data.ramdisk_addr;
> --
> 2.39.2
>

Rather than squashing the information here, you should return a value
that indicates there is no ramdisk. Normally in U-Boot this is
-ENOENT. Then the caller can check it. Also please update the function
docs in the header.

I see that -EINVAL is returned for some other error, so the caller
should be careful to just allow -ENOENT.

Regards,
Simon
diff mbox series

Patch

diff --git a/boot/image-android.c b/boot/image-android.c
index 09c7a44e058..0900579ee8c 100644
--- a/boot/image-android.c
+++ b/boot/image-android.c
@@ -395,7 +395,7 @@  int android_image_get_ramdisk(const void *hdr, const void *vendor_boot_img,
 
 	if (!img_data.ramdisk_size) {
 		*rd_data = *rd_len = 0;
-		return -1;
+		return 0;
 	}
 	if (img_data.header_version > 2) {
 		ramdisk_ptr = img_data.ramdisk_addr;