mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
EFI: further "need_to_free" adjustments
When processing "chain" directives, the previously loaded config file
gets freed. This needs to be recorded accordingly such that no error
path would try to free the same block of memory a 2nd time.
Furthermore, neither .addr nor .size being zero has any meaning towards
the need to free an allocated chunk anymore. Drop (from read_file()) and
replace (in Arm's efi_arch_use_config_file(), to sensibly retain the
comment) respective assignments.
Fixes: 04be2c3a06 ("efi/boot.c: add file.need_to_free")
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
1 parent
44ac57af81
commit
a8a85f03c8
2 files changed
+6
-6
No files matched your search
@@ -591,7 +591,7 @@ static bool __init efi_arch_use_config_file(EFI_SYSTEM_TABLE *SystemTable)
|
||||
|
||||
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 )
|
||||
{
|
||||
/*
|
||||
|
||||
@@ -601,10 +601,7 @@ static bool __init read_file(EFI_FILE_HANDLE dir_handle, CHAR16 *name,
|
||||
PFN_UP(size), &file->addr);
|
||||
}
|
||||
if ( EFI_ERROR(ret) )
|
||||
{
|
||||
file->addr = 0;
|
||||
what = what ?: L"Allocation";
|
||||
}
|
||||
else
|
||||
{
|
||||
file->need_to_free = true;
|
||||
@@ -1271,8 +1268,11 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
|
||||
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 '");
|
||||
|
||||