Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Register
  • Sign in
  • L linux
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • Deployments
    • Deployments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • Kirill Smelkov
  • linux
  • Repository
You need to sign in or sign up before continuing.
  • linux
  • kernel
  • kexec_file.c
Find file BlameHistoryPermalink
  • Thiago Jung Bauermann's avatar
    kexec: fix double-free when failing to relocate the purgatory · cbdfd85a
    Thiago Jung Bauermann authored Sep 01, 2016
    BugLink: http://bugs.launchpad.net/bugs/1627730
    
    commit 070c43ee upstream.
    
    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_cleanup+0x5e/0xb0
        SyS_kexec_file_load+0x448/0x680
        ? putname+0x54/0x60
        ? do_sys_open+0x190/0x1f0
        entry_SYSCALL_64_fastpath+0x13/0x8f
      ---[ end trace 158bb74f5950ca2b ]---
    
    Fix by setting pi->sechdrs an pi->purgatory_buf to NULL, since vfree
    won't try to free a NULL pointer.
    
    Link: http://lkml.kernel.org/r/1472083546-23683-1-git-send-email-bauerman@linux.vnet.ibm.com
    
    
    Signed-off-by: default avatarThiago Jung Bauermann <bauerman@linux.vnet.ibm.com>
    Acked-by: default avatarBaoquan He <bhe@redhat.com>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Cc: Dave Young <dyoung@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    Signed-off-by: default avatarTim Gardner <tim.gardner@canonical.com>
    cbdfd85a
GitLab Nexedi Edition | About GitLab | About Nexedi | 沪ICP备2021021310号-2 | 沪ICP备2021021310号-7