On Tue, Aug 20, 2024 at 2:00 AM Jarkko Sakkinen <jarkko@xxxxxxxxxx> wrote: > > On Mon Aug 19, 2024 at 5:53 PM EEST, Pingfan Liu wrote: > > efi_random_alloc() demands EFI_ALLOCATE_ADDRESS when allocate_pages(), > > but the current implement can not ensure the selected target locates > > inside free area, that is to exclude EFI_BOOT_SERVICES_*, > > EFI_RUNTIME_SERVICES_* etc. > > > > Fix the issue by checking md->type. > > If it is a fix shouldn't this have a fixes tag? > Yes, I will supplement the following in the next version Fixes: 2ddbfc81eac8 ("efi: stub: add implementation of efi_random_alloc()") > > > > Signed-off-by: Pingfan Liu <piliu@xxxxxxxxxx> > > Cc: Ard Biesheuvel <ardb@xxxxxxxxxx> > > To: linux-efi@xxxxxxxxxxxxxxx > > --- > > drivers/firmware/efi/libstub/randomalloc.c | 5 +++++ > > 1 file changed, 5 insertions(+) > > > > diff --git a/drivers/firmware/efi/libstub/randomalloc.c b/drivers/firmware/efi/libstub/randomalloc.c > > index c41e7b2091cdd..7304e767688f2 100644 > > --- a/drivers/firmware/efi/libstub/randomalloc.c > > +++ b/drivers/firmware/efi/libstub/randomalloc.c > > @@ -79,6 +79,8 @@ efi_status_t efi_random_alloc(unsigned long size, > > efi_memory_desc_t *md = (void *)map->map + map_offset; > > unsigned long slots; > > > > I'd add this inline comment: > > /* Skip "unconventional" memory: */ > Adopt. Thanks for your kind review. Best Regards, Pingfan > > + if (!(md->type & (EFI_CONVENTIONAL_MEMORY || EFI_PERSISTENT_MEMORY))) > > + continue; > > slots = get_entry_num_slots(md, size, ilog2(align), alloc_min, > > alloc_max); > > MD_NUM_SLOTS(md) = slots; > > @@ -111,6 +113,9 @@ efi_status_t efi_random_alloc(unsigned long size, > > efi_physical_addr_t target; > > unsigned long pages; > > > > + if (!(md->type & (EFI_CONVENTIONAL_MEMORY || EFI_PERSISTENT_MEMORY))) > > + continue; > > + > > if (total_mirrored_slots > 0 && > > !(md->attribute & EFI_MEMORY_MORE_RELIABLE)) > > continue; > > BR, Jarkko >