Skip to content

Commit c37c916

Browse files
committed
efi/libstub/random: Increase random alloc granularity
The implementation of efi_random_alloc() arbitrarily truncates the provided random seed to 16 bits, which limits the granularity of the randomly chosen allocation offset in memory. This is currently only an issue if the size of physical memory exceeds 128 GB, but going forward, we will reduce the allocation alignment to 64 KB, and this means we need to increase the granularity to ensure that the random memory allocations are distributed evenly. We will need to switch to 64-bit arithmetic for the multiplication, but this does not result in 64-bit integer intrinsic calls on ARM or on i386. Signed-off-by: Ard Biesheuvel <[email protected]>
1 parent e1df73e commit c37c916

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/firmware/efi/libstub/randomalloc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ efi_status_t efi_random_alloc(unsigned long size,
8787
}
8888

8989
/* find a random number between 0 and total_slots */
90-
target_slot = (total_slots * (u16)random_seed) >> 16;
90+
target_slot = (total_slots * (u64)(random_seed & U32_MAX)) >> 32;
9191

9292
/*
9393
* target_slot is now a value in the range [0, total_slots), and so

0 commit comments

Comments
 (0)