On 26 June 2018 at 04:41, Sai Praneeth Prakhya <sai.praneeth.prakhya@xxxxxxxxx> wrote: > From: Sai Praneeth <sai.praneeth.prakhya@xxxxxxxxx> > > efi_memmap_install(), unmaps the existing memory map and installs the > new memory map but doesn't free the memory allocated to the existing > memory map. Fortunately, the details about the existing memory map are > stored in efi.memmap. Hence, use them to free the memory. > > Signed-off-by: Sai Praneeth Prakhya <sai.praneeth.prakhya@xxxxxxxxx> > Reported-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> > Cc: Lee Chun-Yi <jlee@xxxxxxxx> > Cc: Borislav Petkov <bp@xxxxxxxxx> > Cc: Dave Young <dyoung@xxxxxxxxxx> > Cc: Laszlo Ersek <lersek@xxxxxxxxxx> > Cc: Bhupesh Sharma <bhsharma@xxxxxxxxxx> > Cc: Ricardo Neri <ricardo.neri@xxxxxxxxx> > Cc: Ravi Shankar <ravi.v.shankar@xxxxxxxxx> > Cc: Matt Fleming <matt@xxxxxxxxxxxxxxxxxxx> > Cc: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> > --- > > Note: Patch based on efi tree @https://git.kernel.org/pub/scm/linux/kernel/git/efi/efi.git > > drivers/firmware/efi/memmap.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/firmware/efi/memmap.c b/drivers/firmware/efi/memmap.c > index 678e85704054..68b27b14fe94 100644 > --- a/drivers/firmware/efi/memmap.c > +++ b/drivers/firmware/efi/memmap.c > @@ -229,6 +229,9 @@ int __init efi_memmap_install(phys_addr_t addr, unsigned int nr_map) > > efi_memmap_unmap(); > > + /* Free the memory allocated to the existing memory map */ > + efi_memmap_free(efi.memmap.phys_map, efi.memmap.nr_map, efi.memmap.late); > + > data.phys_map = addr; > data.size = efi.memmap.desc_size * nr_map; > data.desc_version = efi.memmap.desc_version; > -- > 2.7.4 > If only it were so simple :-) At this point, efi.memmap.phys_map could point to memory that was allocated early, allocated late or simply passed to the OS at boot time by the stub (in which case it was memblock_reserve()d but not memblock_alloc()d, and it should not be freed) So only allocations made with efi_memmap_alloc() should be freed here. I'm not sure /how/ we should keep track of that: perhaps it is simply a matter of replacing the boolean 'late' with an enum that describes where the memory came from that phys_map points to. -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html