From: Anshul Dalal <anshuld@ti.com>
To: <u-boot@lists.denx.de>
Cc: Anshul Dalal <anshuld@ti.com>, <vigneshr@ti.com>, <seanga2@gmail.com>
Subject: [BUG report] spl: image size check fails in spl_load()
Date: Fri, 14 Feb 2025 16:46:55 +0530 [thread overview]
Message-ID: <20250214111656.2358748-1-anshuld@ti.com> (raw)
Hi all!
I was trying to implement falcon boot on TI AM62x EVM with the kernel image on
SD card's filesystem but the following check in `_spl_load` at
`include/spl_load.h:95` fails to -EIO as per the latest commit [89d3333]:
return read < spl_image->size ? -EIO : 0;
The check seems to be comparing the image size gathered from the header
(spl_image->size) with the number of bytes read form the loader.
From spl_load.h:
ret = spl_parse_image_header(spl_image, bootdev, header);
if (ret)
return ret;
base_offset = spl_image->offset;
/* Only NOR sets this flag. */
if (IS_ENABLED(CONFIG_SPL_NOR_SUPPORT) &&
spl_image->flags & SPL_COPY_PAYLOAD_ONLY)
base_offset += sizeof(*header);
image_offset = ALIGN_DOWN(base_offset, spl_get_bl_len(info));
overhead = base_offset - image_offset;
size = ALIGN(spl_image->size + overhead, spl_get_bl_len(info));
read = info->read(info, offset + image_offset, size,
map_sysmem(spl_image->load_addr - overhead, size));
if (read < 0)
return read;
return read < spl_image->size ? -EIO : 0;
During kernel build process the header size is computed including the BSS
whereas it's removed when creating the uncompressed image. Therefore the size
of the uncompressed image on filesystem will be smaller than the size specified
in the header. Which leads to failure of the above check.
From linux kernel's `arch/arm64/kernel/image.h:63`:
#define HEAD_SYMBOLS \
DEFINE_IMAGE_LE64(_kernel_size_le, _end - _text); \
DEFINE_IMAGE_LE64(_kernel_flags_le, __HEAD_FLAGS);
Disabling the check leads to a successful boot directly to the kernel.
Therefore it seems like the check is non functional as the size in the kernel
header does not correspond with the file size of the kernel image.
Regards,
Anshul
next reply other threads:[~2025-02-14 13:12 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-14 11:16 Anshul Dalal [this message]
[not found] <20250214111251.2349093-1-anshuld@ti.com>
2025-02-15 17:48 ` [BUG report] spl: image size check fails in spl_load() Sean Anderson
2025-02-18 6:07 ` Anshul Dalal
2025-02-19 15:47 ` Sean Anderson
2025-02-20 5:22 ` Anshul Dalal
2025-02-21 2:18 ` Sean Anderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250214111656.2358748-1-anshuld@ti.com \
--to=anshuld@ti.com \
--cc=seanga2@gmail.com \
--cc=u-boot@lists.denx.de \
--cc=vigneshr@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.