• Luis R. Rodriguez's avatar
    module: fix memory leak on early load_module() failures · a5544880
    Luis R. Rodriguez authored
    While looking for early possible module loading failures I was
    able to reproduce a memory leak possible with kmemleak. There
    are a few rare ways to trigger a failure:
    
      o we've run into a failure while processing kernel parameters
        (parse_args() returns an error)
      o mod_sysfs_setup() fails
      o we're a live patch module and copy_module_elf() fails
    
    Chances of running into this issue is really low.
    
    kmemleak splat:
    
    unreferenced object 0xffff9f2c4ada1b00 (size 32):
      comm "kworker/u16:4", pid 82, jiffies 4294897636 (age 681.816s)
      hex dump (first 32 bytes):
        6d 65 6d 73 74 69 63 6b 30 00 00 00 00 00 00 00  memstick0.......
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<ffffffff8c6cfeba>] kmemleak_alloc+0x4a/0xa0
        [<ffffffff8c200046>] __kmalloc_track_caller+0x126/0x230
        [<ffffffff8c1bc581>] kstrdup+0x31/0x60
        [<ffffffff8c1bc5d4>] kstrdup_const+0x24/0x30
        [<ffffffff8c3c23aa>] kvasprintf_const+0x7a/0x90
        [<ffffffff8c3b5481>] kobject_set_name_vargs+0x21/0x90
        [<ffffffff8c4fbdd7>] dev_set_name+0x47/0x50
        [<ffffffffc07819e5>] memstick_check+0x95/0x33c [memstick]
        [<ffffffff8c09c893>] process_one_work+0x1f3/0x4b0
        [<ffffffff8c09cb98>] worker_thread+0x48/0x4e0
        [<ffffffff8c0a2b79>] kthread+0xc9/0xe0
        [<ffffffff8c6dab5f>] ret_from_fork+0x1f/0x40
        [<ffffffffffffffff>] 0xffffffffffffffff
    
    Cc: stable <stable@vger.kernel.org> # v2.6.30
    Fixes: e180a6b7 ("param: fix charp parameters set via sysfs")
    Reviewed-by: default avatarMiroslav Benes <mbenes@suse.cz>
    Reviewed-by: default avatarAaron Tomlin <atomlin@redhat.com>
    Reviewed-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    Acked-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarLuis R. Rodriguez <mcgrof@kernel.org>
    Signed-off-by: default avatarJessica Yu <jeyu@redhat.com>
    a5544880
module.c 110 KB