]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
kho: skip KHO for crash kernel
authorEvangelos Petrongonas <epetron@amazon.de>
Fri, 10 Apr 2026 01:16:05 +0000 (01:16 +0000)
committerMike Rapoport (Microsoft) <rppt@kernel.org>
Tue, 28 Apr 2026 13:11:33 +0000 (16:11 +0300)
kho_fill_kimage() unconditionally populates the kimage with KHO
metadata for every kexec image type. When the image is a crash kernel,
this can be problematic as the crash kernel can run in a small reserved
region and the KHO scratch areas can sit outside it.
The crash kernel then faults during kho_memory_init() when it
tries phys_to_virt() on the KHO FDT address:

  Unable to handle kernel paging request at virtual address xxxxxxxx
  ...
    fdt_offset_ptr+...
    fdt_check_node_offset_+...
    fdt_first_property_offset+...
    fdt_get_property_namelen_+...
    fdt_getprop+...
    kho_memory_init+...
    mm_core_init+...
    start_kernel+...

kho_locate_mem_hole() already skips KHO logic for KEXEC_TYPE_CRASH
images, but kho_fill_kimage() was missing the same guard. As
kho_fill_kimage() is the single point that populates image->kho.fdt
and image->kho.scratch, fixing it here is sufficient for both arm64
and x86 as the FDT and boot_params path are bailing out when these
fields are unset.

Fixes: d7255959b69a ("kho: allow kexec load before KHO finalization")
Signed-off-by: Evangelos Petrongonas <epetron@amazon.de>
Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Link: https://patch.msgid.link/20260410011609.1103-1-epetron@amazon.de
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
kernel/liveupdate/kexec_handover.c

index 94762de1fe5f03873bbd587b0b3d325a9799e634..4fde8325c49fb956683e53c4bdea1d987f3d0f5c 100644 (file)
@@ -1702,7 +1702,7 @@ int kho_fill_kimage(struct kimage *image)
        int err = 0;
        struct kexec_buf scratch;
 
-       if (!kho_enable)
+       if (!kho_enable || image->type == KEXEC_TYPE_CRASH)
                return 0;
 
        image->kho.fdt = virt_to_phys(kho_out.fdt);