On Wed, Dec 03, 2025 at 08:00:36PM +0530, Sudhakar Kuppusamy wrote:
> The grub-mkimage does not add zero padding when creating core.elf with an
> appended signature size that is not aligned to a multiple of 4 bytes.
> Firmware is unable to read the magic string "~Module signature appended~"
> from core.elf.
>
> To fix this, round an appended signature size + appended signature ELF note
> size up to the nearest multiple of a 4-byte alignment and truncate it to the
> appended signature size.
>
> Example:
> grub-mkimage -O powerpc-ieee1275 -o core.elf -d grub-core -p /grub2 -x \
>   kernel.der --appended-signature-size 490 ...
>
> Signed-off-by: Sudhakar Kuppusamy <[email protected]>
> ---
>  util/grub-mkimagexx.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
> index 7fe2e35e6..07a80a36d 100644
> --- a/util/grub-mkimagexx.c
> +++ b/util/grub-mkimagexx.c
> @@ -248,7 +248,13 @@ SUFFIX (grub_mkimage_generate_elf) (const struct 
> grub_install_image_target_desc
>    if (appsig_size)
>      {
>        phnum++;
> -      footer_size += ALIGN_UP (sizeof (struct grub_appended_signature_note), 
> 4);
> +      /*
> +       * Rounds a appended signature size + appended signature note size up 
> to
> +       * the nearest multiple of a 4-byte alignment.
> +       */
> +      footer_size += ALIGN_UP (sizeof (struct grub_appended_signature_note) 
> + appsig_size, 4);
> +      /* Truncating to appended signature size. */
> +      footer_size -= appsig_size;

Should not this be

  footer_size += ALIGN_UP (sizeof (struct grub_appended_signature_note), 4);
  appsig_size += ALIGN_UP (appsig_size, 4);

?

Daniel

_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to