• D
    efi: Fix efi_memmap_alloc() leaks · f0ef6523
    Dan Williams 提交于
    With efi_fake_memmap() and efi_arch_mem_reserve() the efi table may be
    updated and replaced multiple times. When that happens a previous
    dynamically allocated efi memory map can be garbage collected. Use the
    new EFI_MEMMAP_{SLAB,MEMBLOCK} flags to detect when a dynamically
    allocated memory map is being replaced.
    
    Debug statements in efi_memmap_free() reveal:
    
      efi: __efi_memmap_free:37: phys: 0x23ffdd580 size: 2688 flags: 0x2
      efi: __efi_memmap_free:37: phys: 0x9db00 size: 2640 flags: 0x2
      efi: __efi_memmap_free:37: phys: 0x9e580 size: 2640 flags: 0x2
    
    ...a savings of 7968 bytes on a qemu boot with 2 entries specified to
    efi_fake_mem=.
    
    [ ardb: added a comment to clarify that efi_memmap_free() does nothing when
            called from efi_clean_memmap(), i.e., with data->flags == 0x0 ]
    Signed-off-by: NDan Williams <dan.j.williams@intel.com>
    Signed-off-by: NArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: NIngo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20200113172245.27925-13-ardb@kernel.org
    f0ef6523
memmap.c 9.9 KB