• Ard Biesheuvel's avatar
    efi/libstub: Make efi_random_alloc() allocate below 4 GB on 32-bit · 018edcfa
    Ard Biesheuvel authored
    The UEFI stub executes in the context of the firmware, which identity
    maps the available system RAM, which implies that only memory below
    4 GB can be used for allocations on 32-bit architectures, even on [L]PAE
    capable hardware.
    
    So ignore any reported memory above 4 GB in efi_random_alloc(). This
    also fixes a reported build problem on ARM under -Os, where the 64-bit
    logical shift relies on a software routine that the ARM decompressor does
    not provide.
    
    A second [minor] issue is also fixed, where the '+ 1' is moved out of
    the shift, where it belongs: the reason for its presence is that a
    memory region where start == end should count as a single slot, given
    that 'end' takes the desired size and alignment of the allocation into
    account.
    
    To clarify the code in this regard, rename start/end to 'first_slot' and
    'last_slot', respectively, and introduce 'region_end' to describe the
    last usable address of the current region.
    Reported-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Matt Fleming <matt@codeblueprint.co.uk>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/1480010543-25709-2-git-send-email-ard.biesheuvel@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    018edcfa
random.c 5.38 KB