Hi Ran, On Wed, Feb 11 2026, [email protected] wrote:
> From: Ran Xiaokai <[email protected]> > > kho_populate() returns without calling early_memunmap() on success > path, this will cause early ioremap virtual address space leak. > > Fixes: b50634c5e84a ("kho: cleanup error handling in kho_populate()") > Reviewed-by: Pratyush Yadav <[email protected]> > Signed-off-by: Ran Xiaokai <[email protected]> > --- > kernel/liveupdate/kexec_handover.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/kernel/liveupdate/kexec_handover.c > b/kernel/liveupdate/kexec_handover.c > index fb3a7b67676e..3c705b08a489 100644 > --- a/kernel/liveupdate/kexec_handover.c > +++ b/kernel/liveupdate/kexec_handover.c > @@ -1463,13 +1463,14 @@ void __init kho_populate(phys_addr_t fdt_phys, u64 > fdt_len, > struct kho_scratch *scratch = NULL; > phys_addr_t mem_map_phys; > void *fdt = NULL; > + bool populated = false; > int err; > > /* Validate the input FDT */ > fdt = early_memremap(fdt_phys, fdt_len); > if (!fdt) { > pr_warn("setup: failed to memremap FDT (0x%llx)\n", fdt_phys); > - goto err_report; > + goto report; > } > err = fdt_check_header(fdt); > if (err) { > @@ -1529,16 +1530,17 @@ void __init kho_populate(phys_addr_t fdt_phys, u64 > fdt_len, > kho_in.scratch_phys = scratch_phys; > kho_in.mem_map_phys = mem_map_phys; > kho_scratch_cnt = scratch_cnt; > - pr_info("found kexec handover data.\n"); > > - return; > + populated = true; > + pr_info("found kexec handover data.\n"); > > err_unmap_scratch: > early_memunmap(scratch, scratch_len); > err_unmap_fdt: > early_memunmap(fdt, fdt_len); I meant to say all these labels should be renamed, not just err_report. So "err_unmap_scratch" should be "unmap_scratch", and "err_unmap_fdt" should be "unmap_fdt". > -err_report: > - pr_warn("disabling KHO revival\n"); > +report: > + if (!populated) > + pr_warn("disabling KHO revival\n"); > } > > /* Helper functions for kexec_file_load */ -- Regards, Pratyush Yadav
