55 lines
2.4 KiB
Diff
55 lines
2.4 KiB
Diff
From 0a18ad3787b0aca65a6a9e246f03d8dd89d9dfdc Mon Sep 17 00:00:00 2001
|
|
From: Daniel Axtens <dja@axtens.net>
|
|
Date: Tue, 7 Apr 2020 16:17:26 +1000
|
|
Subject: [PATCH] powerpc/mkimage: Fix CHRP note descsz
|
|
|
|
Currently, an image generated with 'grub-mkimage -n' causes an error when
|
|
read with 'readelf -a':
|
|
|
|
Displaying notes found at file offset 0x000106f0 with length 0x0000002c:
|
|
Owner Data size Description
|
|
readelf: Warning: note with invalid namesz and/or descsz found at offset 0x0
|
|
readelf: Warning: type: 0x1275, namesize: 0x00000008, descsize: 0x0000002c, alignment: 4
|
|
|
|
This is because the descsz of the CHRP note is set to
|
|
sizeof (struct grub_ieee1275_note)
|
|
which is the size of the entire note, including name and elf header. The
|
|
desczs should contain only the contents, not the name and header sizes.
|
|
|
|
Set the descsz instead to 'sizeof (struct grub_ieee1275_note_desc)'
|
|
|
|
Resultant readelf output:
|
|
|
|
Displaying notes found at file offset 0x00010710 with length 0x0000002c:
|
|
Owner Data size Description
|
|
PowerPC 0x00000018 Unknown note type: (0x00001275)
|
|
description data: ff ff ff ff 00 c0 00 00 ff ff ff ff ff ff ff ff ff ff ff ff 00 00 40 00
|
|
|
|
So far as I can tell this issue has existed for as long as the note
|
|
generation code has existed, but I guess nothing really checks descsz.
|
|
|
|
Reference: http://git.savannah.gnu.org/cgit/grub.git/commit/?id=06fd69a3fd9d6b86e4a5af6c0d5da1b12545d27c
|
|
|
|
Signed-off-by: Daniel Axtens <dja@axtens.net>
|
|
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
|
---
|
|
util/grub-mkimagexx.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
|
|
index 52bc9c8..00f49cc 100644
|
|
--- a/util/grub-mkimagexx.c
|
|
+++ b/util/grub-mkimagexx.c
|
|
@@ -463,7 +463,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
|
|
grub_util_info ("adding CHRP NOTE segment");
|
|
|
|
note_ptr->header.n_namesz = grub_host_to_target32 (sizeof (GRUB_IEEE1275_NOTE_NAME));
|
|
- note_ptr->header.n_descsz = grub_host_to_target32 (note_size);
|
|
+ note_ptr->header.n_descsz = grub_host_to_target32 (sizeof (struct grub_ieee1275_note_desc));
|
|
note_ptr->header.n_type = grub_host_to_target32 (GRUB_IEEE1275_NOTE_TYPE);
|
|
strcpy (note_ptr->name, GRUB_IEEE1275_NOTE_NAME);
|
|
note_ptr->descriptor.real_mode = grub_host_to_target32 (0xffffffff);
|
|
--
|
|
2.19.1
|
|
|