mirror of https://github.com/ipxe/ipxe.git
[bzimage] Fix page alignment of initrd images
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>pull/55/head
parent
0be77e959e
commit
aa11f5deda
|
@ -522,10 +522,12 @@ static void bzimage_load_initrds ( struct image *image,
|
||||||
|
|
||||||
/* Find highest usable address */
|
/* Find highest usable address */
|
||||||
top = userptr_add ( highest->data, bzimage_align ( highest->len ) );
|
top = userptr_add ( highest->data, bzimage_align ( highest->len ) );
|
||||||
if ( user_to_phys ( top, 0 ) > bzimg->mem_limit )
|
if ( user_to_phys ( top, -1 ) > bzimg->mem_limit ) {
|
||||||
top = phys_to_user ( bzimg->mem_limit );
|
top = phys_to_user ( ( bzimg->mem_limit + 1 ) &
|
||||||
|
~( INITRD_ALIGN - 1 ) );
|
||||||
|
}
|
||||||
DBGC ( image, "bzImage %p loading initrds from %#08lx downwards\n",
|
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 */
|
/* Load initrds in order */
|
||||||
for_each_image ( initrd ) {
|
for_each_image ( initrd ) {
|
||||||
|
|
Loading…
Reference in New Issue