lkml.org 
[lkml]   [2017]   [Jul]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.12 065/196] xhci: fix memleak in xhci_run()
    Date
    4.12-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Shu Wang <shuwang@redhat.com>

    commit d6f5f071f1e13cadecf8aef1faa7e5d6fbc9f33b upstream.

    Found this issue by kmemleak.
    xhci_run() did not check return val and free command for
    xhci_queue_vendor_command()

    unreferenced object 0xffff88011c0be500 (size 64):
    comm "kworker/0:1", pid 58, jiffies 4294670908 (age 50.420s)
    hex dump (first 32 bytes):
    backtrace:
    [<ffffffff8176166a>] kmemleak_alloc+0x4a/0xa0
    [<ffffffff8121801a>] kmem_cache_alloc_trace+0xca/0x1d0
    [<ffffffff81576bf4>] xhci_alloc_command+0x44/0x130
    [<ffffffff8156f1cc>] xhci_run+0x4cc/0x630
    [<ffffffff8153b84b>] usb_add_hcd+0x3bb/0x950
    [<ffffffff8154eac8>] usb_hcd_pci_probe+0x188/0x500
    [<ffffffff815851ac>] xhci_pci_probe+0x2c/0x220
    [<ffffffff813d2ca5>] local_pci_probe+0x45/0xa0
    [<ffffffff810a54e4>] work_for_cpu_fn+0x14/0x20
    [<ffffffff810a8409>] process_one_work+0x149/0x360
    [<ffffffff810a8d08>] worker_thread+0x1d8/0x3c0
    [<ffffffff810ae7d9>] kthread+0x109/0x140
    [<ffffffff8176d585>] ret_from_fork+0x25/0x30
    [<ffffffffffffffff>] 0xffffffffffffffff

    Signed-off-by: Shu Wang <shuwang@redhat.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/host/xhci.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/drivers/usb/host/xhci.c
    +++ b/drivers/usb/host/xhci.c
    @@ -622,8 +622,10 @@ int xhci_run(struct usb_hcd *hcd)
    if (!command)
    return -ENOMEM;

    - xhci_queue_vendor_command(xhci, command, 0, 0, 0,
    + ret = xhci_queue_vendor_command(xhci, command, 0, 0, 0,
    TRB_TYPE(TRB_NEC_GET_FW));
    + if (ret)
    + xhci_free_command(xhci, command);
    }
    xhci_dbg_trace(xhci, trace_xhci_dbg_init,
    "Finished xhci_run for USB2 roothub");

    \
     
     \ /
      Last update: 2017-07-25 21:58    [W:4.381 / U:0.392 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site