• Li Huafei's avatar
    RISC-V: kexec: Fix memory leak of fdt buffer · 96df59b1
    Li Huafei authored
    This is reported by kmemleak detector:
    
    unreferenced object 0xff60000082864000 (size 9588):
      comm "kexec", pid 146, jiffies 4294900634 (age 64.788s)
      hex dump (first 32 bytes):
        d0 0d fe ed 00 00 12 ed 00 00 00 48 00 00 11 40  ...........H...@
        00 00 00 28 00 00 00 11 00 00 00 02 00 00 00 00  ...(............
      backtrace:
        [<00000000f95b17c4>] kmemleak_alloc+0x34/0x3e
        [<00000000b9ec8e3e>] kmalloc_order+0x9c/0xc4
        [<00000000a95cf02e>] kmalloc_order_trace+0x34/0xb6
        [<00000000f01e68b4>] __kmalloc+0x5c2/0x62a
        [<000000002bd497b2>] kvmalloc_node+0x66/0xd6
        [<00000000906542fa>] of_kexec_alloc_and_setup_fdt+0xa6/0x6ea
        [<00000000e1166bde>] elf_kexec_load+0x206/0x4ec
        [<0000000036548e09>] kexec_image_load_default+0x40/0x4c
        [<0000000079fbe1b4>] sys_kexec_file_load+0x1c4/0x322
        [<0000000040c62c03>] ret_from_syscall+0x0/0x2
    
    In elf_kexec_load(), a buffer is allocated via kvmalloc() to store fdt.
    While it's not freed back to system when kexec kernel is reloaded or
    unloaded.  Then memory leak is caused.  Fix it by introducing riscv
    specific function arch_kimage_file_post_load_cleanup(), and freeing the
    buffer there.
    
    Fixes: 6261586e ("RISC-V: Add kexec_file support")
    Signed-off-by: default avatarLi Huafei <lihuafei1@huawei.com>
    Reviewed-by: default avatarConor Dooley <conor.dooley@microchip.com>
    Reviewed-by: default avatarLiao Chang <liaochang1@huawei.com>
    Link: https://lore.kernel.org/r/20221104095658.141222-1-lihuafei1@huawei.com
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    96df59b1
kexec.h 1.84 KB