fdt = lookup_fdt_config_table(SystemTable);
dtbfile.ptr = fdt;
- dtbfile.size = 0; /* Config table memory can't be freed, so set size to 0 */
+ dtbfile.need_to_free = false; /* Config table memory can't be freed. */
if ( !fdt || fdt_node_offset_by_compatible(fdt, 0, "multiboot,module") < 0 )
{
/*
PFN_UP(size), &file->addr);
}
if ( EFI_ERROR(ret) )
- {
- file->addr = 0;
what = what ?: L"Allocation";
- }
else
{
file->need_to_free = true;
name.s = get_value(&cfg, "global", "chain");
if ( !name.s )
break;
- efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size));
- cfg.addr = 0;
+ if ( cfg.need_to_free )
+ {
+ efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size));
+ cfg.need_to_free = false;
+ }
if ( !read_file(dir_handle, s2w(&name), &cfg, NULL) )
{
PrintStr(L"Chained configuration file '");