• Alan Stern's avatar
    USB: Fix invalid-free bug in port_over_current_notify() · d81bb019
    Alan Stern authored
    Syzbot and KASAN found the following invalid-free bug in
    port_over_current_notify():
    
    --------------------------------------------------------------------------
    BUG: KASAN: double-free or invalid-free in port_over_current_notify
    drivers/usb/core/hub.c:5192 [inline]
    BUG: KASAN: double-free or invalid-free in port_event
    drivers/usb/core/hub.c:5241 [inline]
    BUG: KASAN: double-free or invalid-free in hub_event+0xd97/0x4140
    drivers/usb/core/hub.c:5384
    
    CPU: 1 PID: 32710 Comm: kworker/1:3 Not tainted 4.20.0-rc3+ #129
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
    Google 01/01/2011
    Workqueue: usb_hub_wq hub_event
    Call Trace:
      __dump_stack lib/dump_stack.c:77 [inline]
      dump_stack+0x244/0x39d lib/dump_stack.c:113
      print_address_description.cold.7+0x9/0x1ff mm/kasan/report.c:256
      kasan_report_invalid_free+0x64/0xa0 mm/kasan/report.c:336
      __kasan_slab_free+0x13a/0x150 mm/kasan/kasan.c:501
      kasan_slab_free+0xe/0x10 mm/kasan/kasan.c:528
      __cache_free mm/slab.c:3498 [inline]
      kfree+0xcf/0x230 mm/slab.c:3817
      port_over_current_notify drivers/usb/core/hub.c:5192 [inline]
      port_event drivers/usb/core/hub.c:5241 [inline]
      hub_event+0xd97/0x4140 drivers/usb/core/hub.c:5384
      process_one_work+0xc90/0x1c40 kernel/workqueue.c:2153
      worker_thread+0x17f/0x1390 kernel/workqueue.c:2296
      kthread+0x35a/0x440 kernel/kthread.c:246
      ret_from_fork+0x3a/0x50 arch/x86/entry/entry_64.S:352
    --------------------------------------------------------------------------
    
    The problem is caused by use of a static array to store
    environment-string pointers.  When the routine is called by multiple
    threads concurrently, the pointers from one thread can overwrite those
    from another.
    
    The solution is to use an ordinary automatic array instead of a static
    array.
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Reported-by: syzbot+98881958e1410ec7e53c@syzkaller.appspotmail.com
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    d81bb019
hub.c 171 KB