Skip to content
  • Thiago Jung Bauermann's avatar
    kexec: fix double-free when failing to relocate the purgatory · 070c43ee
    Thiago Jung Bauermann authored
    If kexec_apply_relocations fails, kexec_load_purgatory frees pi->sechdrs
    and pi->purgatory_buf.  This is redundant, because in case of error
    kimage_file_prepare_segments calls kimage_file_post_load_cleanup, which
    will also free those buffers.
    
    This causes two warnings like the following, one for pi->sechdrs and the
    other for pi->purgatory_buf:
    
      kexec-bzImage64: Loading purgatory failed
      ------------[ cut here ]------------
      WARNING: CPU: 1 PID: 2119 at mm/vmalloc.c:1490 __vunmap+0xc1/0xd0
      Trying to vfree() nonexistent vm area (ffffc90000e91000)
      Modules linked in:
      CPU: 1 PID: 2119 Comm: kexec Not tainted 4.8.0-rc3+ #5
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
      Call Trace:
        dump_stack+0x4d/0x65
        __warn+0xcb/0xf0
        warn_slowpath_fmt+0x4f/0x60
        ? find_vmap_area+0x19/0x70
        ? kimage_file_post_load_cleanup+0x47/0xb0
        __vunmap+0xc1/0xd0
        vfree+0x2e/0x70
        kimage_file_post_load_cleanu...
    070c43ee