efi_loader: Ensure memory allocations are page aligned
When the max_addr parameter of efi_find_free_memory() is within bounds of an existing map and fits the reservation, we just return that address as allocation value. That breaks however if max_addr is not page aligned. So ensure that it always comes to us page aligned, simplifying the allocation logic. Without this, I've seen breakage where we were allocating pages at -1U (32bit) which fits into a region that spans beyond 0x100000000. In that case, we would return 0xffffffff as a valid memory allocation, although we usually do guarantee they are all page aligned. Fix this by aligning the max address argument always. Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
afdc4fcc89
commit
c2e1ad70a7
@ -294,6 +294,12 @@ static uint64_t efi_find_free_memory(uint64_t len, uint64_t max_addr)
|
||||
{
|
||||
struct list_head *lhandle;
|
||||
|
||||
/*
|
||||
* Prealign input max address, so we simplify our matching
|
||||
* logic below and can just reuse it as return pointer.
|
||||
*/
|
||||
max_addr &= ~EFI_PAGE_MASK;
|
||||
|
||||
list_for_each(lhandle, &efi_mem) {
|
||||
struct efi_mem_list *lmem = list_entry(lhandle,
|
||||
struct efi_mem_list, link);
|
||||
|
Loading…
Reference in New Issue
Block a user