Skip to content

Commit

Permalink
[bzimage] Fix page alignment of initrd images
Browse files Browse the repository at this point in the history
The initrd_addr_max field represents the highest byte address that may
be used to hold initrd images, and is therefore almost certainly not
aligned to a page boundary: a typical value might be 0x7fffffff.

Fix the address calculations to ensure that the initrd images are
always aligned to a page boundary.

Reported-by: Sitsofe Wheeler <sitsofe@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Oct 28, 2016
1 parent 0be77e9 commit aa11f5d
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/arch/x86/image/bzimage.c
Expand Up @@ -522,10 +522,12 @@ static void bzimage_load_initrds ( struct image *image,

/* Find highest usable address */
top = userptr_add ( highest->data, bzimage_align ( highest->len ) );
if ( user_to_phys ( top, 0 ) > bzimg->mem_limit )
top = phys_to_user ( bzimg->mem_limit );
if ( user_to_phys ( top, -1 ) > bzimg->mem_limit ) {
top = phys_to_user ( ( bzimg->mem_limit + 1 ) &
~( INITRD_ALIGN - 1 ) );
}
DBGC ( image, "bzImage %p loading initrds from %#08lx downwards\n",
image, user_to_phys ( top, 0 ) );
image, user_to_phys ( top, -1 ) );

/* Load initrds in order */
for_each_image ( initrd ) {
Expand Down

0 comments on commit aa11f5d

Please sign in to comment.