efi: stub: add implementation of efi_random_alloc()
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Mon, 11 Jan 2016 09:43:16 +0000 (10:43 +0100)
committerAlex Shi <alex.shi@linaro.org>
Wed, 11 May 2016 15:21:11 +0000 (23:21 +0800)
commit0f01a865b4feb17ff014717ed2745a845e0c0ee3
treee5cbf4517499007fc4ecca595b3902106cc8ab5e
parentee6457583818600e4c9b7f3a09d358d6ae3727b8
efi: stub: add implementation of efi_random_alloc()

This implements efi_random_alloc(), which allocates a chunk of memory of
a certain size at a certain alignment, and uses the random_seed argument
it receives to randomize the address of the allocation.

This is implemented by iterating over the UEFI memory map, counting the
number of suitable slots (aligned offsets) within each region, and picking
a random number between 0 and 'number of slots - 1' to select the slot,
This should guarantee that each possible offset is chosen equally likely.

Suggested-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Matt Fleming <matt@codeblueprint.co.uk>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(cherry picked from commit 2ddbfc81eac84a299cb4747a8764bc43f23e9008)
Signed-off-by: Alex Shi <alex.shi@linaro.org>
drivers/firmware/efi/libstub/efistub.h
drivers/firmware/efi/libstub/random.c