mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
efi/libstub: Add limit argument to efi_random_alloc()
x86 will need to limit the kernel memory allocation to the lowest 512 MiB of memory, to match the behavior of the existing bare metal KASLR physical randomization logic. So in preparation for that, add a limit parameter to efi_random_alloc() and wire it up. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Link: https://lore.kernel.org/r/20230807162720.545787-22-ardb@kernel.org
This commit is contained in:
committed by
Borislav Petkov (AMD)
parent
8338151935
commit
bc5ddceff4
@@ -16,7 +16,8 @@
|
||||
*/
|
||||
static unsigned long get_entry_num_slots(efi_memory_desc_t *md,
|
||||
unsigned long size,
|
||||
unsigned long align_shift)
|
||||
unsigned long align_shift,
|
||||
u64 alloc_limit)
|
||||
{
|
||||
unsigned long align = 1UL << align_shift;
|
||||
u64 first_slot, last_slot, region_end;
|
||||
@@ -29,7 +30,7 @@ static unsigned long get_entry_num_slots(efi_memory_desc_t *md,
|
||||
return 0;
|
||||
|
||||
region_end = min(md->phys_addr + md->num_pages * EFI_PAGE_SIZE - 1,
|
||||
(u64)EFI_ALLOC_LIMIT);
|
||||
alloc_limit);
|
||||
if (region_end < size)
|
||||
return 0;
|
||||
|
||||
@@ -54,7 +55,8 @@ efi_status_t efi_random_alloc(unsigned long size,
|
||||
unsigned long align,
|
||||
unsigned long *addr,
|
||||
unsigned long random_seed,
|
||||
int memory_type)
|
||||
int memory_type,
|
||||
unsigned long alloc_limit)
|
||||
{
|
||||
unsigned long total_slots = 0, target_slot;
|
||||
unsigned long total_mirrored_slots = 0;
|
||||
@@ -76,7 +78,7 @@ efi_status_t efi_random_alloc(unsigned long size,
|
||||
efi_memory_desc_t *md = (void *)map->map + map_offset;
|
||||
unsigned long slots;
|
||||
|
||||
slots = get_entry_num_slots(md, size, ilog2(align));
|
||||
slots = get_entry_num_slots(md, size, ilog2(align), alloc_limit);
|
||||
MD_NUM_SLOTS(md) = slots;
|
||||
total_slots += slots;
|
||||
if (md->attribute & EFI_MEMORY_MORE_RELIABLE)
|
||||
|
||||
Reference in New Issue
Block a user