• Stefan Brüns's avatar
    efi_loader: Readd freed pages to memory pool · b61d857b
    Stefan Brüns authored
    
    
    Currently each allocation creates a new mapping. Readding the mapping
    as free memory (EFI_CONVENTIONAL_MEMORY) potentially allows to hand out
    an existing mapping, thus limiting the number of mapping descriptors in
    the memory map.
    
    Mitigates a problem with current (4.8rc7) linux kernels when doing an
    efi_get_memory map, resulting in an infinite loop. Space for the memory
    map is reserved with allocate_pool (implicitly creating a new mapping) and
    filled. If there is insufficient slack space (8 entries) in the map, the
    space is freed and a new round is started, with space for one more entry.
    As each round increases requirement and allocation by exactly one, there
    is never enough slack space. (At least 32 entries are allocated, so as
    long as there are less than 24 entries, there is enough slack).
    Earlier kernels reserved no slack, and did less allocations, so this
    problem was not visible.
    Signed-off-by: default avatarStefan Brüns <stefan.bruens@rwth-aachen.de>
    Reviewed-by: default avatarAlexander Graf <agraf@suse.de>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    b61d857b
efi_memory.c 12.1 KB