All of lore.kernel.org
 help / color / mirror / Atom feed
* Multiboot 2 Header Alignment: implementation contradicts specification
@ 2020-05-23 16:50 Jacob Paul
  2020-05-23 18:33 ` Hans Ulrich Niedermann
  0 siblings, 1 reply; 4+ messages in thread
From: Jacob Paul @ 2020-05-23 16:50 UTC (permalink / raw)
  To: grub-devel

The Multiboot2 specification specifies that the Multiboot2 header should
be 8-byte (64-bit) aligned:
 >An OS image must contain an additional header called Multiboot2 header,
 >besides the headers of the format used by the OS image. The Multiboot2
 >header must be contained completely within the first 32768 bytes of the
 >OS image, and must be 64-bit aligned. In general, it should come as
 >early as possible, and may be embedded in the beginning of the text
 >segment after the real executable header.

However, the implementation of find_header() in multiboot_mbi2.c looks
like this:
 >static struct multiboot_header *
 >find_header (grub_properly_aligned_t *buffer, grub_ssize_t len)
 >{
 >  struct multiboot_header *header;
 >  /* Look for the multiboot header in the buffer.  The header should
 >     be at least 12 bytes and aligned on a 4-byte boundary.  */
 >  for (header = (struct multiboot_header *) buffer;
 >       ((char *) header <= (char *) buffer + len - 12);
 >       header = (struct multiboot_header *) ((grub_uint32_t *) header 
+ >MULTIBOOT_HEADER_ALIGN / 4))
 >    {
 >      if (header->magic == MULTIBOOT2_HEADER_MAGIC
 >	  && !(header->magic + header->architecture
 >	       + header->header_length + header->checksum)
 >	  && header->architecture == MULTIBOOT2_ARCHITECTURE_CURRENT)
 >	return header;
 >    }
 >  return NULL;
 >}

There are multiple things that doesn't look right to me.
The comment says that the header should be 4-byte aligned while at the
same time, the actual loop only increments header 2 bytes for every
iteration (MULTIBOOT_HEADER_ALIGN=8).
It seems like this was just copied over from multiboot_mbi.c since they
basically are identical with even the same comment.

Is there a genuine problem here, or am I missing something?
If it actually is just lazy copy-pasting; should it be changed, as some
people might actually rely on grub finding the Multiboot2 header even
though it isn't 8-byte aligned?

Jacob



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-05-23 20:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-23 16:50 Multiboot 2 Header Alignment: implementation contradicts specification Jacob Paul
2020-05-23 18:33 ` Hans Ulrich Niedermann
2020-05-23 19:24   ` Jacob Paul
2020-05-23 20:26     ` Hans Ulrich Niedermann

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.