commit 9f8f7f94aa55f9cdbec409ceb1ae075c5c813241
Author: Ben Hutchings <ben@decadent.org.uk>
Date:   Tue Dec 10 18:01:39 2019 +0000

    Linux 3.16.79

commit f13615187cd8069c0f1c492e8f244a0c69d0663e
Author: Johan Hovold <johan@kernel.org>
Date:   Wed Oct 23 10:27:05 2019 +0200

    can: peak_usb: fix slab info leak
    
    commit f7a1337f0d29b98733c8824e165fca3371d7d4fd upstream.
    
    Fix a small slab info leak due to a failure to clear the command buffer
    at allocation.
    
    The first 16 bytes of the command buffer are always sent to the device
    in pcan_usb_send_cmd() even though only the first two may have been
    initialised in case no argument payload is provided (e.g. when waiting
    for a response).
    
    Fixes: bb4785551f64 ("can: usb: PEAK-System Technik USB adapters driver core")
    Reported-by: syzbot+863724e7128e14b26732@syzkaller.appspotmail.com
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 89577bea6adf8cd2a1b97c91f7266bb56aa181b0
Author: Tomas Bortoli <tomasbortoli@gmail.com>
Date:   Wed Jul 31 12:19:05 2019 -0300

    media: ttusb-dec: Fix info-leak in ttusb_dec_send_command()
    
    commit a10feaf8c464c3f9cfdd3a8a7ce17e1c0d498da1 upstream.
    
    The function at issue does not always initialize each byte allocated
    for 'b' and can therefore leak uninitialized memory to a USB device in
    the call to usb_bulk_msg()
    
    Use kzalloc() instead of kmalloc()
    
    Signed-off-by: Tomas Bortoli <tomasbortoli@gmail.com>
    Reported-by: syzbot+0522702e9d67142379f1@syzkaller.appspotmail.com
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit f703c175f8e428959a33cdadb3e09986f14390ce
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Thu Oct 3 14:53:59 2019 -0400

    HID: Fix assumption that devices have inputs
    
    commit d9d4b1e46d9543a82c23f6df03f4ad697dab361b upstream.
    
    The syzbot fuzzer found a slab-out-of-bounds write bug in the hid-gaff
    driver.  The problem is caused by the driver's assumption that the
    device must have an input report.  While this will be true for all
    normal HID input devices, a suitably malicious device can violate the
    assumption.
    
    The same assumption is present in over a dozen other HID drivers.
    This patch fixes them by checking that the list of hid_inputs for the
    hid_device is nonempty before allowing it to be used.
    
    Reported-and-tested-by: syzbot+403741a091bf41d4ae79@syzkaller.appspotmail.com
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    [bwh: Backported to 3.16:
     - Drop changes in hid-logitech-hidpp, hid-microsoft
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit bc5b704c76044bf22be57e5adcd100d6005115cc
Author: Johan Hovold <johan@kernel.org>
Date:   Wed Oct 9 12:48:41 2019 +0200

    USB: iowarrior: fix use-after-free on disconnect
    
    commit edc4746f253d907d048de680a621e121517f484b upstream.
    
    A recent fix addressing a deadlock on disconnect introduced a new bug
    by moving the present flag out of the critical section protected by the
    driver-data mutex. This could lead to a racing release() freeing the
    driver data before disconnect() is done with it.
    
    Due to insufficient locking a related use-after-free could be triggered
    also before the above mentioned commit. Specifically, the driver needs
    to hold the driver-data mutex also while checking the opened flag at
    disconnect().
    
    Fixes: c468a8aa790e ("usb: iowarrior: fix deadlock on disconnect")
    Fixes: 946b960d13c1 ("USB: add driver for iowarrior devices.")
    Reported-by: syzbot+0761012cebf7bdb38137@syzkaller.appspotmail.com
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20191009104846.5925-2-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 596710903a2fe55a66089a22b4dbea2390f2f5d8
Author: Oliver Neukum <oneukum@suse.com>
Date:   Thu Aug 8 11:27:28 2019 +0200

    usb: iowarrior: fix deadlock on disconnect
    
    commit c468a8aa790e0dfe0a7f8a39db282d39c2c00b46 upstream.
    
    We have to drop the mutex before we close() upon disconnect()
    as close() needs the lock. This is safe to do by dropping the
    mutex as intfdata is already set to NULL, so open() will fail.
    
    Fixes: 03f36e885fc26 ("USB: open disconnect race in iowarrior")
    Reported-by: syzbot+a64a382964bf6c71a9c0@syzkaller.appspotmail.com
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Link: https://lore.kernel.org/r/20190808092728.23417-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit daec20c79bdc41b44b651aa8c9506cb138a83952
Author: Hillf Danton <hdanton@sina.com>
Date:   Tue Aug 6 16:38:58 2019 +0800

    HID: hiddev: avoid opening a disconnected device
    
    commit 9c09b214f30e3c11f9b0b03f89442df03643794d upstream.
    
    syzbot found the following crash on:
    
    HEAD commit:    e96407b4 usb-fuzzer: main usb gadget fuzzer driver
    git tree:       https://github.com/google/kasan.git usb-fuzzer
    console output: https://syzkaller.appspot.com/x/log.txt?x=147ac20c600000
    kernel config:  https://syzkaller.appspot.com/x/.config?x=792eb47789f57810
    dashboard link: https://syzkaller.appspot.com/bug?extid=62a1e04fd3ec2abf099e
    compiler:       gcc (GCC) 9.0.0 20181231 (experimental)
    
    ==================================================================
    BUG: KASAN: use-after-free in __lock_acquire+0x302a/0x3b50
    kernel/locking/lockdep.c:3753
    Read of size 8 at addr ffff8881cf591a08 by task syz-executor.1/26260
    
    CPU: 1 PID: 26260 Comm: syz-executor.1 Not tainted 5.3.0-rc2+ #24
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
    Google 01/01/2011
    Call Trace:
      __dump_stack lib/dump_stack.c:77 [inline]
      dump_stack+0xca/0x13e lib/dump_stack.c:113
      print_address_description+0x6a/0x32c mm/kasan/report.c:351
      __kasan_report.cold+0x1a/0x33 mm/kasan/report.c:482
      kasan_report+0xe/0x12 mm/kasan/common.c:612
      __lock_acquire+0x302a/0x3b50 kernel/locking/lockdep.c:3753
      lock_acquire+0x127/0x320 kernel/locking/lockdep.c:4412
      __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
      _raw_spin_lock_irqsave+0x32/0x50 kernel/locking/spinlock.c:159
      hiddev_release+0x82/0x520 drivers/hid/usbhid/hiddev.c:221
      __fput+0x2d7/0x840 fs/file_table.c:280
      task_work_run+0x13f/0x1c0 kernel/task_work.c:113
      exit_task_work include/linux/task_work.h:22 [inline]
      do_exit+0x8ef/0x2c50 kernel/exit.c:878
      do_group_exit+0x125/0x340 kernel/exit.c:982
      get_signal+0x466/0x23d0 kernel/signal.c:2728
      do_signal+0x88/0x14e0 arch/x86/kernel/signal.c:815
      exit_to_usermode_loop+0x1a2/0x200 arch/x86/entry/common.c:159
      prepare_exit_to_usermode arch/x86/entry/common.c:194 [inline]
      syscall_return_slowpath arch/x86/entry/common.c:274 [inline]
      do_syscall_64+0x45f/0x580 arch/x86/entry/common.c:299
      entry_SYSCALL_64_after_hwframe+0x49/0xbe
    RIP: 0033:0x459829
    Code: fd b7 fb ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 48 89 f8 48 89 f7
    48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff
    ff 0f 83 cb b7 fb ff c3 66 2e 0f 1f 84 00 00 00 00
    RSP: 002b:00007f75b2a6ccf8 EFLAGS: 00000246 ORIG_RAX: 00000000000000ca
    RAX: fffffffffffffe00 RBX: 000000000075c078 RCX: 0000000000459829
    RDX: 0000000000000000 RSI: 0000000000000080 RDI: 000000000075c078
    RBP: 000000000075c070 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 000000000075c07c
    R13: 00007ffcdfe1023f R14: 00007f75b2a6d9c0 R15: 000000000075c07c
    
    Allocated by task 104:
      save_stack+0x1b/0x80 mm/kasan/common.c:69
      set_track mm/kasan/common.c:77 [inline]
      __kasan_kmalloc mm/kasan/common.c:487 [inline]
      __kasan_kmalloc.constprop.0+0xbf/0xd0 mm/kasan/common.c:460
      kmalloc include/linux/slab.h:552 [inline]
      kzalloc include/linux/slab.h:748 [inline]
      hiddev_connect+0x242/0x5b0 drivers/hid/usbhid/hiddev.c:900
      hid_connect+0x239/0xbb0 drivers/hid/hid-core.c:1882
      hid_hw_start drivers/hid/hid-core.c:1981 [inline]
      hid_hw_start+0xa2/0x130 drivers/hid/hid-core.c:1972
      appleir_probe+0x13e/0x1a0 drivers/hid/hid-appleir.c:308
      hid_device_probe+0x2be/0x3f0 drivers/hid/hid-core.c:2209
      really_probe+0x281/0x650 drivers/base/dd.c:548
      driver_probe_device+0x101/0x1b0 drivers/base/dd.c:709
      __device_attach_driver+0x1c2/0x220 drivers/base/dd.c:816
      bus_for_each_drv+0x15c/0x1e0 drivers/base/bus.c:454
      __device_attach+0x217/0x360 drivers/base/dd.c:882
      bus_probe_device+0x1e4/0x290 drivers/base/bus.c:514
      device_add+0xae6/0x16f0 drivers/base/core.c:2114
      hid_add_device+0x33c/0x990 drivers/hid/hid-core.c:2365
      usbhid_probe+0xa81/0xfa0 drivers/hid/usbhid/hid-core.c:1386
      usb_probe_interface+0x305/0x7a0 drivers/usb/core/driver.c:361
      really_probe+0x281/0x650 drivers/base/dd.c:548
      driver_probe_device+0x101/0x1b0 drivers/base/dd.c:709
      __device_attach_driver+0x1c2/0x220 drivers/base/dd.c:816
      bus_for_each_drv+0x15c/0x1e0 drivers/base/bus.c:454
      __device_attach+0x217/0x360 drivers/base/dd.c:882
      bus_probe_device+0x1e4/0x290 drivers/base/bus.c:514
      device_add+0xae6/0x16f0 drivers/base/core.c:2114
      usb_set_configuration+0xdf6/0x1670 drivers/usb/core/message.c:2023
      generic_probe+0x9d/0xd5 drivers/usb/core/generic.c:210
      usb_probe_device+0x99/0x100 drivers/usb/core/driver.c:266
      really_probe+0x281/0x650 drivers/base/dd.c:548
      driver_probe_device+0x101/0x1b0 drivers/base/dd.c:709
      __device_attach_driver+0x1c2/0x220 drivers/base/dd.c:816
      bus_for_each_drv+0x15c/0x1e0 drivers/base/bus.c:454
      __device_attach+0x217/0x360 drivers/base/dd.c:882
      bus_probe_device+0x1e4/0x290 drivers/base/bus.c:514
      device_add+0xae6/0x16f0 drivers/base/core.c:2114
      usb_new_device.cold+0x6a4/0xe79 drivers/usb/core/hub.c:2536
      hub_port_connect drivers/usb/core/hub.c:5098 [inline]
      hub_port_connect_change drivers/usb/core/hub.c:5213 [inline]
      port_event drivers/usb/core/hub.c:5359 [inline]
      hub_event+0x1b5c/0x3640 drivers/usb/core/hub.c:5441
      process_one_work+0x92b/0x1530 kernel/workqueue.c:2269
      worker_thread+0x96/0xe20 kernel/workqueue.c:2415
      kthread+0x318/0x420 kernel/kthread.c:255
      ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352
    
    Freed by task 104:
      save_stack+0x1b/0x80 mm/kasan/common.c:69
      set_track mm/kasan/common.c:77 [inline]
      __kasan_slab_free+0x130/0x180 mm/kasan/common.c:449
      slab_free_hook mm/slub.c:1423 [inline]
      slab_free_freelist_hook mm/slub.c:1470 [inline]
      slab_free mm/slub.c:3012 [inline]
      kfree+0xe4/0x2f0 mm/slub.c:3953
      hiddev_connect.cold+0x45/0x5c drivers/hid/usbhid/hiddev.c:914
      hid_connect+0x239/0xbb0 drivers/hid/hid-core.c:1882
      hid_hw_start drivers/hid/hid-core.c:1981 [inline]
      hid_hw_start+0xa2/0x130 drivers/hid/hid-core.c:1972
      appleir_probe+0x13e/0x1a0 drivers/hid/hid-appleir.c:308
      hid_device_probe+0x2be/0x3f0 drivers/hid/hid-core.c:2209
      really_probe+0x281/0x650 drivers/base/dd.c:548
      driver_probe_device+0x101/0x1b0 drivers/base/dd.c:709
      __device_attach_driver+0x1c2/0x220 drivers/base/dd.c:816
      bus_for_each_drv+0x15c/0x1e0 drivers/base/bus.c:454
      __device_attach+0x217/0x360 drivers/base/dd.c:882
      bus_probe_device+0x1e4/0x290 drivers/base/bus.c:514
      device_add+0xae6/0x16f0 drivers/base/core.c:2114
      hid_add_device+0x33c/0x990 drivers/hid/hid-core.c:2365
      usbhid_probe+0xa81/0xfa0 drivers/hid/usbhid/hid-core.c:1386
      usb_probe_interface+0x305/0x7a0 drivers/usb/core/driver.c:361
      really_probe+0x281/0x650 drivers/base/dd.c:548
      driver_probe_device+0x101/0x1b0 drivers/base/dd.c:709
      __device_attach_driver+0x1c2/0x220 drivers/base/dd.c:816
      bus_for_each_drv+0x15c/0x1e0 drivers/base/bus.c:454
      __device_attach+0x217/0x360 drivers/base/dd.c:882
      bus_probe_device+0x1e4/0x290 drivers/base/bus.c:514
      device_add+0xae6/0x16f0 drivers/base/core.c:2114
      usb_set_configuration+0xdf6/0x1670 drivers/usb/core/message.c:2023
      generic_probe+0x9d/0xd5 drivers/usb/core/generic.c:210
      usb_probe_device+0x99/0x100 drivers/usb/core/driver.c:266
      really_probe+0x281/0x650 drivers/base/dd.c:548
      driver_probe_device+0x101/0x1b0 drivers/base/dd.c:709
      __device_attach_driver+0x1c2/0x220 drivers/base/dd.c:816
      bus_for_each_drv+0x15c/0x1e0 drivers/base/bus.c:454
      __device_attach+0x217/0x360 drivers/base/dd.c:882
      bus_probe_device+0x1e4/0x290 drivers/base/bus.c:514
      device_add+0xae6/0x16f0 drivers/base/core.c:2114
      usb_new_device.cold+0x6a4/0xe79 drivers/usb/core/hub.c:2536
      hub_port_connect drivers/usb/core/hub.c:5098 [inline]
      hub_port_connect_change drivers/usb/core/hub.c:5213 [inline]
      port_event drivers/usb/core/hub.c:5359 [inline]
      hub_event+0x1b5c/0x3640 drivers/usb/core/hub.c:5441
      process_one_work+0x92b/0x1530 kernel/workqueue.c:2269
      worker_thread+0x96/0xe20 kernel/workqueue.c:2415
      kthread+0x318/0x420 kernel/kthread.c:255
      ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352
    
    The buggy address belongs to the object at ffff8881cf591900
      which belongs to the cache kmalloc-512 of size 512
    The buggy address is located 264 bytes inside of
      512-byte region [ffff8881cf591900, ffff8881cf591b00)
    The buggy address belongs to the page:
    page:ffffea00073d6400 refcount:1 mapcount:0 mapping:ffff8881da002500
    index:0x0 compound_mapcount: 0
    flags: 0x200000000010200(slab|head)
    raw: 0200000000010200 0000000000000000 0000000100000001 ffff8881da002500
    raw: 0000000000000000 00000000000c000c 00000001ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
      ffff8881cf591900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ffff8881cf591980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    > ffff8881cf591a00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                           ^
      ffff8881cf591a80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ffff8881cf591b00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    ==================================================================
    
    In order to avoid opening a disconnected device, we need to check exist
    again after acquiring the existance lock, and bail out if necessary.
    
    Reported-by: syzbot <syzbot+62a1e04fd3ec2abf099e@syzkaller.appspotmail.com>
    Cc: Andrey Konovalov <andreyknvl@google.com>
    Signed-off-by: Hillf Danton <hdanton@sina.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a2133df2ca08f0d320e651f682f66a1097e6b752
Author: Hillf Danton <hdanton@sina.com>
Date:   Tue Aug 6 16:40:15 2019 +0800

    HID: hiddev: do cleanup in failure of opening a device
    
    commit 6d4472d7bec39917b54e4e80245784ea5d60ce49 upstream.
    
    Undo what we did for opening before releasing the memory slice.
    
    Reported-by: syzbot <syzbot+62a1e04fd3ec2abf099e@syzkaller.appspotmail.com>
    Cc: Andrey Konovalov <andreyknvl@google.com>
    Signed-off-by: Hillf Danton <hdanton@sina.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8145f2181955c7c95f42a7f71b81ff91bc9e7b8c
Author: Oliver Neukum <oneukum@suse.com>
Date:   Fri Nov 15 11:35:05 2019 -0800

    Input: ff-memless - kill timer in destroy()
    
    commit fa3a5a1880c91bb92594ad42dfe9eedad7996b86 upstream.
    
    No timer must be left running when the device goes away.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Reported-and-tested-by: syzbot+b6c55daa701fc389e286@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/r/1573726121.17351.3.camel@suse.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 22cbb8fb12b3b5101260915162ad2b0b56a9284d
Author: Johan Hovold <johan@kernel.org>
Date:   Wed Sep 25 11:29:12 2019 +0200

    USB: adutux: fix use-after-free on disconnect
    
    commit 44efc269db7929f6275a1fa927ef082e533ecde0 upstream.
    
    The driver was clearing its struct usb_device pointer, which it used as
    an inverted disconnected flag, before deregistering the character device
    and without serialising against racing release().
    
    This could lead to a use-after-free if a racing release() callback
    observes the cleared pointer and frees the driver data before
    disconnect() is finished with it.
    
    This could also lead to NULL-pointer dereferences in a racing open().
    
    Fixes: f08812d5eb8f ("USB: FIx locks and urb->status in adutux (updated)")
    Reported-by: syzbot+0243cb250a51eeefb8cc@syzkaller.appspotmail.com
    Tested-by: syzbot+0243cb250a51eeefb8cc@syzkaller.appspotmail.com
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20190925092913.8608-1-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 669ddcc72d26dc8a6e8df7b4d1f0fa896b9748d2
Author: Colin Ian King <colin.king@canonical.com>
Date:   Tue Nov 7 11:45:27 2017 +0000

    USB: adutux: remove redundant variable minor
    
    commit 8444efc4a052332d643ed5c8aebcca148c7de032 upstream.
    
    Variable minor is being assigned but never read, hence it is redundant
    and can be removed. Cleans up clang warning:
    
    drivers/usb/misc/adutux.c:770:2: warning: Value stored to 'minor' is
    never read
    
    Signed-off-by: Colin Ian King <colin.king@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16 so that commit 44efc269db79 "USB: adutux: fix
     use-after-free on disconnect" applies cleanly]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 21377f88c2757c6ee3e28407fb1c44b4bdf7e6b2
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Wed Dec 4 10:28:54 2019 +0100

    KVM: x86: fix out-of-bounds write in KVM_GET_EMULATED_CPUID (CVE-2019-19332)
    
    commit 433f4ba1904100da65a311033f17a9bf586b287e upstream.
    
    The bounds check was present in KVM_GET_SUPPORTED_CPUID but not
    KVM_GET_EMULATED_CPUID.
    
    Reported-by: syzbot+e3f4897236c4eeb8af4f@syzkaller.appspotmail.com
    Fixes: 84cffe499b94 ("kvm: Emulate MOVBE", 2013-10-29)
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 77251fec285eebe2258e81e643820428b92a68a6
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Tue Apr 30 19:34:08 2019 +0800

    appletalk: Set error code if register_snap_client failed
    
    commit c93ad1337ad06a718890a89cdd85188ff9a5a5cc upstream.
    
    If register_snap_client fails in atalk_init,
    error code should be set, otherwise it will
    triggers NULL pointer dereference while unloading
    module.
    
    Fixes: 9804501fa122 ("appletalk: Fix potential NULL pointer dereference in unregister_snap_client")
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 1551894964c90588b285d3a4f7da516e0ee9025a
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Thu Mar 14 13:47:59 2019 +0800

    appletalk: Fix potential NULL pointer dereference in unregister_snap_client
    
    commit 9804501fa1228048857910a6bf23e085aade37cc upstream.
    
    register_snap_client may return NULL, all the callers
    check it, but only print a warning. This will result in
    NULL pointer dereference in unregister_snap_client and other
    places.
    
    It has always been used like this since v2.6
    
    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 0669f62b66de87c6628edc6b5e7e7b317a4b8876
Author: Navid Emamdoost <navid.emamdoost@gmail.com>
Date:   Tue Sep 10 18:44:15 2019 -0500

    scsi: bfa: release allocated memory in case of error
    
    commit 0e62395da2bd5166d7c9e14cbc7503b256a34cb0 upstream.
    
    In bfad_im_get_stats if bfa_port_get_stats fails, allocated memory needs to
    be released.
    
    Link: https://lore.kernel.org/r/20190910234417.22151-1-navid.emamdoost@gmail.com
    Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 52373b487ee420c43e1d9d01b4b8c11bb6e9bdbf
Author: Navid Emamdoost <navid.emamdoost@gmail.com>
Date:   Fri Oct 4 14:29:16 2019 -0500

    crypto: user - fix memory leak in crypto_report
    
    commit ffdde5932042600c6807d46c1550b28b0db6a3bc upstream.
    
    In crypto_report, a new skb is created via nlmsg_new(). This skb should
    be released if crypto_report_alg() fails.
    
    Fixes: a38f7907b926 ("crypto: Add userspace configuration API")
    Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    [bwh: Backported to 3.16: adjust filename]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit ea8e4f792da5652f23481231e252f06221b73445
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Tue Apr 7 21:27:01 2015 +0800

    crypto: user - Fix crypto_alg_match race
    
    commit 016baaa1183bb0c5fb2a7de42413bba8a51c1bc8 upstream.
    
    The function crypto_alg_match returns an algorithm without taking
    any references on it.  This means that the algorithm can be freed
    at any time, therefore all users of crypto_alg_match are buggy.
    
    This patch fixes this by taking a reference count on the algorithm
    to prevent such races.
    
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 914927c7bac4ecd2351bdee0cd5b2b1c11150342
Author: Navid Emamdoost <navid.emamdoost@gmail.com>
Date:   Fri Oct 4 15:16:48 2019 -0500

    mwifiex: pcie: Fix memory leak in mwifiex_pcie_init_evt_ring
    
    commit d10dcb615c8e29d403a24d35f8310a7a53e3050c upstream.
    
    In mwifiex_pcie_init_evt_ring, a new skb is allocated which should be
    released if mwifiex_map_pci_memory() fails. The release for skb and
    card->evtbd_ring_vbase is added.
    
    Fixes: 0732484b47b5 ("mwifiex: separate ring initialization and ring creation routines")
    Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
    Acked-by: Ganapathi Bhat <gbhat@marvell.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    [bwh: Backported to 3.16: adjust filename]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit f0eed3b1a34f1e7d8b2c06ad5ddf0ea60aea71ca
Author: Navid Emamdoost <navid.emamdoost@gmail.com>
Date:   Fri Oct 4 15:08:52 2019 -0500

    mwifiex: pcie: Fix memory leak in mwifiex_pcie_alloc_cmdrsp_buf
    
    commit db8fd2cde93227e566a412cf53173ffa227998bc upstream.
    
    In mwifiex_pcie_alloc_cmdrsp_buf, a new skb is allocated which should be
    released if mwifiex_map_pci_memory() fails. The release is added.
    
    Fixes: fc3314609047 ("mwifiex: use pci_alloc/free_consistent APIs for PCIe")
    Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
    Acked-by: Ganapathi Bhat <gbhat@marvell.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    [bwh: Backported to 3.16: adjust filename]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit f26d980434a06f44b693a26a87aa5300fa4016fd
Author: Navid Emamdoost <navid.emamdoost@gmail.com>
Date:   Thu Sep 19 21:44:38 2019 -0500

    can: gs_usb: gs_can_open(): prevent memory leak
    
    commit fb5be6a7b4863ecc44963bb80ca614584b6c7817 upstream.
    
    In gs_can_open() if usb_submit_urb() fails the allocated urb should be
    released.
    
    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 311edf1932ef820b3e101d52f2d79f371fd4d186
Author: Navid Emamdoost <navid.emamdoost@gmail.com>
Date:   Fri Oct 25 23:53:30 2019 -0500

    wimax: i2400: Fix memory leak in i2400m_op_rfkill_sw_toggle
    
    commit 6f3ef5c25cc762687a7341c18cbea5af54461407 upstream.
    
    In the implementation of i2400m_op_rfkill_sw_toggle() the allocated
    buffer for cmd should be released before returning. The
    documentation for i2400m_msg_to_dev() says when it returns the buffer
    can be reused. Meaning cmd should be released in either case. Move
    kfree(cmd) before return to be reached by all execution paths.
    
    Fixes: 2507e6ab7a9a ("wimax: i2400: fix memory leak")
    Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 50e479c12f37cc24fea72bcb5da64ed127395f14
Author: Navid Emamdoost <navid.emamdoost@gmail.com>
Date:   Tue Sep 10 18:01:40 2019 -0500

    wimax: i2400: fix memory leak
    
    commit 2507e6ab7a9a440773be476141a255934468c5ef upstream.
    
    In i2400m_op_rfkill_sw_toggle cmd buffer should be released along with
    skb response.
    
    Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 9eec2aca63328997846b52e91e88dab94ccd1414
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Fri Sep 20 21:54:17 2019 +0200

    nl80211: validate beacon head
    
    commit f88eb7c0d002a67ef31aeb7850b42ff69abc46dc upstream.
    
    We currently don't validate the beacon head, i.e. the header,
    fixed part and elements that are to go in front of the TIM
    element. This means that the variable elements there can be
    malformed, e.g. have a length exceeding the buffer size, but
    most downstream code from this assumes that this has already
    been checked.
    
    Add the necessary checks to the netlink policy.
    
    Fixes: ed1b6cc7f80f ("cfg80211/nl80211: add beacon settings")
    Link: https://lore.kernel.org/r/1569009255-I7ac7fbe9436e9d8733439eab8acbbd35e55c74ef@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 48ed745ea1ae3dc91b07a021ce3ff5ca75995551
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Thu Feb 7 21:44:41 2019 +0100

    cfg80211: add and use strongly typed element iteration macros
    
    commit 0f3b07f027f87a38ebe5c436490095df762819be upstream.
    
    Rather than always iterating elements from frames with pure
    u8 pointers, add a type "struct element" that encapsulates
    the id/datalen/data format of them.
    
    Then, add the element iteration macros
     * for_each_element
     * for_each_element_id
     * for_each_element_extid
    
    which take, as their first 'argument', such a structure and
    iterate through a given u8 array interpreting it as elements.
    
    While at it and since we'll need it, also add
     * for_each_subelement
     * for_each_subelement_id
     * for_each_subelement_extid
    
    which instead of taking data/length just take an outer element
    and use its data/datalen.
    
    Also add for_each_element_completed() to determine if any of
    the loops above completed, i.e. it was able to parse all of
    the elements successfully and no data remained.
    
    Use for_each_element_id() in cfg80211_find_ie_match() as the
    first user of this.
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 470a2d36f614f40b7f032071cfa6662dfcc1eda4
Author: Oliver Neukum <oneukum@suse.com>
Date:   Tue Jul 30 09:48:27 2019 +0200

    media: b2c2-flexcop-usb: add sanity checking
    
    commit 1b976fc6d684e3282914cdbe7a8d68fdce19095c upstream.
    
    The driver needs an isochronous endpoint to be present. It will
    oops in its absence. Add checking for it.
    
    Reported-by: syzbot+d93dff37e6a89431c158@syzkaller.appspotmail.com
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3a593dd8bd7505f9acbc7b6f8928ec6b7978c125
Author: Martijn Coenen <maco@android.com>
Date:   Fri Jan 5 11:27:07 2018 +0100

    ANDROID: binder: remove waitqueue when thread exits.
    
    commit f5cb779ba16334b45ba8946d6bfa6d9834d1527f upstream.
    
    binder_poll() passes the thread->wait waitqueue that
    can be slept on for work. When a thread that uses
    epoll explicitly exits using BINDER_THREAD_EXIT,
    the waitqueue is freed, but it is never removed
    from the corresponding epoll data structure. When
    the process subsequently exits, the epoll cleanup
    code tries to access the waitlist, which results in
    a use-after-free.
    
    Prevent this by using POLLFREE when the thread exits.
    
    Signed-off-by: Martijn Coenen <maco@android.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    [backport BINDER_LOOPER_STATE_POLL logic as well]
    Signed-off-by: Mattias Nissler <mnissler@chromium.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16: adjust filename]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a7fd3ecd250f76407d0ff3a1454d02994909c7fc
Author: Chris Brandt <chris.brandt@renesas.com>
Date:   Thu Sep 26 07:19:09 2019 -0500

    i2c: riic: Clear NACK in tend isr
    
    commit a71e2ac1f32097fbb2beab098687a7a95c84543e upstream.
    
    The NACKF flag should be cleared in INTRIICNAKI interrupt processing as
    description in HW manual.
    
    This issue shows up quickly when PREEMPT_RT is applied and a device is
    probed that is not plugged in (like a touchscreen controller). The result
    is endless interrupts that halt system boot.
    
    Fixes: 310c18a41450 ("i2c: riic: add driver")
    Reported-by: Chien Nguyen <chien.nguyen.eb@rvc.renesas.com>
    Signed-off-by: Chris Brandt <chris.brandt@renesas.com>
    Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 9abbb201d3e64116f40d6283e2790c91bc80ca22
Author: Pavel Shilovsky <pshilov@microsoft.com>
Date:   Thu Sep 26 12:31:20 2019 -0700

    CIFS: Fix oplock handling for SMB 2.1+ protocols
    
    commit a016e2794fc3a245a91946038dd8f34d65e53cc3 upstream.
    
    There may be situations when a server negotiates SMB 2.1
    protocol version or higher but responds to a CREATE request
    with an oplock rather than a lease.
    
    Currently the client doesn't handle such a case correctly:
    when another CREATE comes in the server sends an oplock
    break to the initial CREATE and the client doesn't send
    an ack back due to a wrong caching level being set (READ
    instead of RWH). Missing an oplock break ack makes the
    server wait until the break times out which dramatically
    increases the latency of the second CREATE.
    
    Fix this by properly detecting oplocks when using SMB 2.1
    protocol version and higher.
    
    Signed-off-by: Pavel Shilovsky <pshilov@microsoft.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7a92de36889e8b6526b76c347392f895ffa46b97
Author: Vasily Averin <vvs@virtuozzo.com>
Date:   Fri Sep 13 18:17:11 2019 +0300

    fuse: fix missing unlock_page in fuse_writepage()
    
    commit d5880c7a8620290a6c90ced7a0e8bd0ad9419601 upstream.
    
    unlock_page() was missing in case of an already in-flight write against the
    same page.
    
    Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
    Fixes: ff17be086477 ("fuse: writepage: skip already in flight")
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b4e46ee82413a78d41945e4e60e2121fd6c8b0f8
Author: Murphy Zhou <jencce.kernel@gmail.com>
Date:   Sat Sep 21 19:26:00 2019 +0800

    CIFS: fix max ea value size
    
    commit 63d37fb4ce5ae7bf1e58f906d1bf25f036fe79b2 upstream.
    
    It should not be larger then the slab max buf size. If user
    specifies a larger size, it passes this check and goes
    straightly to SMB2_set_info_init performing an insecure memcpy.
    
    Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
    Reviewed-by: Aurelien Aptel <aaptel@suse.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a0cab4f0326c0f31dd15dfe1c960cf4d11b964b1
Author: Wei Wang <wvw@google.com>
Date:   Tue Nov 12 12:42:23 2019 -0800

    thermal: Fix deadlock in thermal thermal_zone_device_check
    
    commit 163b00cde7cf2206e248789d2780121ad5e6a70b upstream.
    
    1851799e1d29 ("thermal: Fix use-after-free when unregistering thermal zone
    device") changed cancel_delayed_work to cancel_delayed_work_sync to avoid
    a use-after-free issue. However, cancel_delayed_work_sync could be called
    insides the WQ causing deadlock.
    
    [54109.642398] c0   1162 kworker/u17:1   D    0 11030      2 0x00000000
    [54109.642437] c0   1162 Workqueue: thermal_passive_wq thermal_zone_device_check
    [54109.642447] c0   1162 Call trace:
    [54109.642456] c0   1162  __switch_to+0x138/0x158
    [54109.642467] c0   1162  __schedule+0xba4/0x1434
    [54109.642480] c0   1162  schedule_timeout+0xa0/0xb28
    [54109.642492] c0   1162  wait_for_common+0x138/0x2e8
    [54109.642511] c0   1162  flush_work+0x348/0x40c
    [54109.642522] c0   1162  __cancel_work_timer+0x180/0x218
    [54109.642544] c0   1162  handle_thermal_trip+0x2c4/0x5a4
    [54109.642553] c0   1162  thermal_zone_device_update+0x1b4/0x25c
    [54109.642563] c0   1162  thermal_zone_device_check+0x18/0x24
    [54109.642574] c0   1162  process_one_work+0x3cc/0x69c
    [54109.642583] c0   1162  worker_thread+0x49c/0x7c0
    [54109.642593] c0   1162  kthread+0x17c/0x1b0
    [54109.642602] c0   1162  ret_from_fork+0x10/0x18
    [54109.643051] c0   1162 kworker/u17:2   D    0 16245      2 0x00000000
    [54109.643067] c0   1162 Workqueue: thermal_passive_wq thermal_zone_device_check
    [54109.643077] c0   1162 Call trace:
    [54109.643085] c0   1162  __switch_to+0x138/0x158
    [54109.643095] c0   1162  __schedule+0xba4/0x1434
    [54109.643104] c0   1162  schedule_timeout+0xa0/0xb28
    [54109.643114] c0   1162  wait_for_common+0x138/0x2e8
    [54109.643122] c0   1162  flush_work+0x348/0x40c
    [54109.643131] c0   1162  __cancel_work_timer+0x180/0x218
    [54109.643141] c0   1162  handle_thermal_trip+0x2c4/0x5a4
    [54109.643150] c0   1162  thermal_zone_device_update+0x1b4/0x25c
    [54109.643159] c0   1162  thermal_zone_device_check+0x18/0x24
    [54109.643167] c0   1162  process_one_work+0x3cc/0x69c
    [54109.643177] c0   1162  worker_thread+0x49c/0x7c0
    [54109.643186] c0   1162  kthread+0x17c/0x1b0
    [54109.643195] c0   1162  ret_from_fork+0x10/0x18
    [54109.644500] c0   1162 cat             D    0  7766      1 0x00000001
    [54109.644515] c0   1162 Call trace:
    [54109.644524] c0   1162  __switch_to+0x138/0x158
    [54109.644536] c0   1162  __schedule+0xba4/0x1434
    [54109.644546] c0   1162  schedule_preempt_disabled+0x80/0xb0
    [54109.644555] c0   1162  __mutex_lock+0x3a8/0x7f0
    [54109.644563] c0   1162  __mutex_lock_slowpath+0x14/0x20
    [54109.644575] c0   1162  thermal_zone_get_temp+0x84/0x360
    [54109.644586] c0   1162  temp_show+0x30/0x78
    [54109.644609] c0   1162  dev_attr_show+0x5c/0xf0
    [54109.644628] c0   1162  sysfs_kf_seq_show+0xcc/0x1a4
    [54109.644636] c0   1162  kernfs_seq_show+0x48/0x88
    [54109.644656] c0   1162  seq_read+0x1f4/0x73c
    [54109.644664] c0   1162  kernfs_fop_read+0x84/0x318
    [54109.644683] c0   1162  __vfs_read+0x50/0x1bc
    [54109.644692] c0   1162  vfs_read+0xa4/0x140
    [54109.644701] c0   1162  SyS_read+0xbc/0x144
    [54109.644708] c0   1162  el0_svc_naked+0x34/0x38
    [54109.845800] c0   1162 D 720.000s 1->7766->7766 cat [panic]
    
    Fixes: 1851799e1d29 ("thermal: Fix use-after-free when unregistering thermal zone device")
    Signed-off-by: Wei Wang <wvw@google.com>
    Signed-off-by: Zhang Rui <rui.zhang@intel.com>
    Cc: Ido Schimmel <idosch@mellanox.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 376f90e0eac877d4acfafc1e2eed7cef544bf773
Author: Ido Schimmel <idosch@mellanox.com>
Date:   Wed Jul 10 13:14:52 2019 +0300

    thermal: Fix use-after-free when unregistering thermal zone device
    
    commit 1851799e1d2978f68eea5d9dff322e121dcf59c1 upstream.
    
    thermal_zone_device_unregister() cancels the delayed work that polls the
    thermal zone, but it does not wait for it to finish. This is racy with
    respect to the freeing of the thermal zone device, which can result in a
    use-after-free [1].
    
    Fix this by waiting for the delayed work to finish before freeing the
    thermal zone device. Note that thermal_zone_device_set_polling() is
    never invoked from an atomic context, so it is safe to call
    cancel_delayed_work_sync() that can block.
    
    [1]
    [  +0.002221] ==================================================================
    [  +0.000064] BUG: KASAN: use-after-free in __mutex_lock+0x1076/0x11c0
    [  +0.000016] Read of size 8 at addr ffff8881e48e0450 by task kworker/1:0/17
    
    [  +0.000023] CPU: 1 PID: 17 Comm: kworker/1:0 Not tainted 5.2.0-rc6-custom-02495-g8e73ca3be4af #1701
    [  +0.000010] Hardware name: Mellanox Technologies Ltd. MSN2100-CB2FO/SA001017, BIOS 5.6.5 06/07/2016
    [  +0.000016] Workqueue: events_freezable_power_ thermal_zone_device_check
    [  +0.000012] Call Trace:
    [  +0.000021]  dump_stack+0xa9/0x10e
    [  +0.000020]  print_address_description.cold.2+0x9/0x25e
    [  +0.000018]  __kasan_report.cold.3+0x78/0x9d
    [  +0.000016]  kasan_report+0xe/0x20
    [  +0.000016]  __mutex_lock+0x1076/0x11c0
    [  +0.000014]  step_wise_throttle+0x72/0x150
    [  +0.000018]  handle_thermal_trip+0x167/0x760
    [  +0.000019]  thermal_zone_device_update+0x19e/0x5f0
    [  +0.000019]  process_one_work+0x969/0x16f0
    [  +0.000017]  worker_thread+0x91/0xc40
    [  +0.000014]  kthread+0x33d/0x400
    [  +0.000015]  ret_from_fork+0x3a/0x50
    
    [  +0.000020] Allocated by task 1:
    [  +0.000015]  save_stack+0x19/0x80
    [  +0.000015]  __kasan_kmalloc.constprop.4+0xc1/0xd0
    [  +0.000014]  kmem_cache_alloc_trace+0x152/0x320
    [  +0.000015]  thermal_zone_device_register+0x1b4/0x13a0
    [  +0.000015]  mlxsw_thermal_init+0xc92/0x23d0
    [  +0.000014]  __mlxsw_core_bus_device_register+0x659/0x11b0
    [  +0.000013]  mlxsw_core_bus_device_register+0x3d/0x90
    [  +0.000013]  mlxsw_pci_probe+0x355/0x4b0
    [  +0.000014]  local_pci_probe+0xc3/0x150
    [  +0.000013]  pci_device_probe+0x280/0x410
    [  +0.000013]  really_probe+0x26a/0xbb0
    [  +0.000013]  driver_probe_device+0x208/0x2e0
    [  +0.000013]  device_driver_attach+0xfe/0x140
    [  +0.000013]  __driver_attach+0x110/0x310
    [  +0.000013]  bus_for_each_dev+0x14b/0x1d0
    [  +0.000013]  driver_register+0x1c0/0x400
    [  +0.000015]  mlxsw_sp_module_init+0x5d/0xd3
    [  +0.000014]  do_one_initcall+0x239/0x4dd
    [  +0.000013]  kernel_init_freeable+0x42b/0x4e8
    [  +0.000012]  kernel_init+0x11/0x18b
    [  +0.000013]  ret_from_fork+0x3a/0x50
    
    [  +0.000015] Freed by task 581:
    [  +0.000013]  save_stack+0x19/0x80
    [  +0.000014]  __kasan_slab_free+0x125/0x170
    [  +0.000013]  kfree+0xf3/0x310
    [  +0.000013]  thermal_release+0xc7/0xf0
    [  +0.000014]  device_release+0x77/0x200
    [  +0.000014]  kobject_put+0x1a8/0x4c0
    [  +0.000014]  device_unregister+0x38/0xc0
    [  +0.000014]  thermal_zone_device_unregister+0x54e/0x6a0
    [  +0.000014]  mlxsw_thermal_fini+0x184/0x35a
    [  +0.000014]  mlxsw_core_bus_device_unregister+0x10a/0x640
    [  +0.000013]  mlxsw_devlink_core_bus_device_reload+0x92/0x210
    [  +0.000015]  devlink_nl_cmd_reload+0x113/0x1f0
    [  +0.000014]  genl_family_rcv_msg+0x700/0xee0
    [  +0.000013]  genl_rcv_msg+0xca/0x170
    [  +0.000013]  netlink_rcv_skb+0x137/0x3a0
    [  +0.000012]  genl_rcv+0x29/0x40
    [  +0.000013]  netlink_unicast+0x49b/0x660
    [  +0.000013]  netlink_sendmsg+0x755/0xc90
    [  +0.000013]  __sys_sendto+0x3de/0x430
    [  +0.000013]  __x64_sys_sendto+0xe2/0x1b0
    [  +0.000013]  do_syscall_64+0xa4/0x4d0
    [  +0.000013]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    [  +0.000017] The buggy address belongs to the object at ffff8881e48e0008
                   which belongs to the cache kmalloc-2k of size 2048
    [  +0.000012] The buggy address is located 1096 bytes inside of
                   2048-byte region [ffff8881e48e0008, ffff8881e48e0808)
    [  +0.000007] The buggy address belongs to the page:
    [  +0.000012] page:ffffea0007923800 refcount:1 mapcount:0 mapping:ffff88823680d0c0 index:0x0 compound_mapcount: 0
    [  +0.000020] flags: 0x200000000010200(slab|head)
    [  +0.000019] raw: 0200000000010200 ffffea0007682008 ffffea00076ab808 ffff88823680d0c0
    [  +0.000016] raw: 0000000000000000 00000000000d000d 00000001ffffffff 0000000000000000
    [  +0.000007] page dumped because: kasan: bad access detected
    
    [  +0.000012] Memory state around the buggy address:
    [  +0.000012]  ffff8881e48e0300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  +0.000012]  ffff8881e48e0380: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  +0.000012] >ffff8881e48e0400: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  +0.000008]                                                  ^
    [  +0.000012]  ffff8881e48e0480: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  +0.000012]  ffff8881e48e0500: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  +0.000007] ==================================================================
    
    Fixes: b1569e99c795 ("ACPI: move thermal trip handling to generic thermal layer")
    Reported-by: Jiri Pirko <jiri@mellanox.com>
    Signed-off-by: Ido Schimmel <idosch@mellanox.com>
    Acked-by: Jiri Pirko <jiri@mellanox.com>
    Signed-off-by: Zhang Rui <rui.zhang@intel.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit dcc73d39de64661a42930d2418ee06ac825e01c2
Author: Vasily Gorbik <gor@linux.ibm.com>
Date:   Thu Sep 19 15:55:17 2019 +0200

    s390/cio: exclude subchannels with no parent from pseudo check
    
    commit ab5758848039de9a4b249d46e4ab591197eebaf2 upstream.
    
    ccw console is created early in start_kernel and used before css is
    initialized or ccw console subchannel is registered. Until then console
    subchannel does not have a parent. For that reason assume subchannels
    with no parent are not pseudo subchannels. This fixes the following
    kasan finding:
    
    BUG: KASAN: global-out-of-bounds in sch_is_pseudo_sch+0x8e/0x98
    Read of size 8 at addr 00000000000005e8 by task swapper/0/0
    
    CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.3.0-rc8-07370-g6ac43dd12538 #2
    Hardware name: IBM 2964 NC9 702 (z/VM 6.4.0)
    Call Trace:
    ([<000000000012cd76>] show_stack+0x14e/0x1e0)
     [<0000000001f7fb44>] dump_stack+0x1a4/0x1f8
     [<00000000007d7afc>] print_address_description+0x64/0x3c8
     [<00000000007d75f6>] __kasan_report+0x14e/0x180
     [<00000000018a2986>] sch_is_pseudo_sch+0x8e/0x98
     [<000000000189b950>] cio_enable_subchannel+0x1d0/0x510
     [<00000000018cac7c>] ccw_device_recognition+0x12c/0x188
     [<0000000002ceb1a8>] ccw_device_enable_console+0x138/0x340
     [<0000000002cf1cbe>] con3215_init+0x25e/0x300
     [<0000000002c8770a>] console_init+0x68a/0x9b8
     [<0000000002c6a3d6>] start_kernel+0x4fe/0x728
     [<0000000000100070>] startup_continue+0x70/0xd0
    
    Reviewed-by: Sebastian Ott <sebott@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d736d3ad093894d29b2cc530e51ea4d0693d39fb
Author: Vasily Gorbik <gor@linux.ibm.com>
Date:   Tue Sep 17 20:04:04 2019 +0200

    s390/cio: avoid calling strlen on null pointer
    
    commit ea298e6ee8b34b3ed4366be7eb799d0650ebe555 upstream.
    
    Fix the following kasan finding:
    BUG: KASAN: global-out-of-bounds in ccwgroup_create_dev+0x850/0x1140
    Read of size 1 at addr 0000000000000000 by task systemd-udevd.r/561
    
    CPU: 30 PID: 561 Comm: systemd-udevd.r Tainted: G    B
    Hardware name: IBM 3906 M04 704 (LPAR)
    Call Trace:
    ([<0000000231b3db7e>] show_stack+0x14e/0x1a8)
     [<0000000233826410>] dump_stack+0x1d0/0x218
     [<000000023216fac4>] print_address_description+0x64/0x380
     [<000000023216f5a8>] __kasan_report+0x138/0x168
     [<00000002331b8378>] ccwgroup_create_dev+0x850/0x1140
     [<00000002332b618a>] group_store+0x3a/0x50
     [<00000002323ac706>] kernfs_fop_write+0x246/0x3b8
     [<00000002321d409a>] vfs_write+0x132/0x450
     [<00000002321d47da>] ksys_write+0x122/0x208
     [<0000000233877102>] system_call+0x2a6/0x2c8
    
    Triggered by:
    openat(AT_FDCWD, "/sys/bus/ccwgroup/drivers/qeth/group",
                    O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = 16
    write(16, "0.0.bd00,0.0.bd01,0.0.bd02", 26) = 26
    
    The problem is that __get_next_id in ccwgroup_create_dev might set "buf"
    buffer pointer to NULL and explicit check for that is required.
    
    Reviewed-by: Sebastian Ott <sebott@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 846903f2d25e290cf01b78e884d7ba031703ee32
Author: Vasily Gorbik <gor@linux.ibm.com>
Date:   Tue Sep 17 22:59:03 2019 +0200

    s390/topology: avoid firing events before kobjs are created
    
    commit f3122a79a1b0a113d3aea748e0ec26f2cb2889de upstream.
    
    arch_update_cpu_topology is first called from:
    kernel_init_freeable->sched_init_smp->sched_init_domains
    
    even before cpus has been registered in:
    kernel_init_freeable->do_one_initcall->s390_smp_init
    
    Do not trigger kobject_uevent change events until cpu devices are
    actually created. Fixes the following kasan findings:
    
    BUG: KASAN: global-out-of-bounds in kobject_uevent_env+0xb40/0xee0
    Read of size 8 at addr 0000000000000020 by task swapper/0/1
    
    BUG: KASAN: global-out-of-bounds in kobject_uevent_env+0xb36/0xee0
    Read of size 8 at addr 0000000000000018 by task swapper/0/1
    
    CPU: 0 PID: 1 Comm: swapper/0 Tainted: G    B
    Hardware name: IBM 3906 M04 704 (LPAR)
    Call Trace:
    ([<0000000143c6db7e>] show_stack+0x14e/0x1a8)
     [<0000000145956498>] dump_stack+0x1d0/0x218
     [<000000014429fb4c>] print_address_description+0x64/0x380
     [<000000014429f630>] __kasan_report+0x138/0x168
     [<0000000145960b96>] kobject_uevent_env+0xb36/0xee0
     [<0000000143c7c47c>] arch_update_cpu_topology+0x104/0x108
     [<0000000143df9e22>] sched_init_domains+0x62/0xe8
     [<000000014644c94a>] sched_init_smp+0x3a/0xc0
     [<0000000146433a20>] kernel_init_freeable+0x558/0x958
     [<000000014599002a>] kernel_init+0x22/0x160
     [<00000001459a71d4>] ret_from_fork+0x28/0x30
     [<00000001459a71dc>] kernel_thread_starter+0x0/0x10
    
    Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 183fb1de1665e1d6eea989414dea657caf75e474
Author: Peter Mamonov <pmamonov@gmail.com>
Date:   Wed Sep 18 19:27:55 2019 +0300

    net/phy: fix DP83865 10 Mbps HDX loopback disable function
    
    commit e47488b2df7f9cb405789c7f5d4c27909fc597ae upstream.
    
    According to the DP83865 datasheet "the 10 Mbps HDX loopback can be
    disabled in the expanded memory register 0x1C0.1". The driver erroneously
    used bit 0 instead of bit 1.
    
    Fixes: 4621bf129856 ("phy: Add file missed in previous commit.")
    Signed-off-by: Peter Mamonov <pmamonov@gmail.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit cf83b40c9d22829374811aad99fe26f15a8f70d0
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Sep 18 08:05:39 2019 -0700

    sch_netem: fix a divide by zero in tabledist()
    
    commit b41d936b5ecfdb3a4abc525ce6402a6c49cffddc upstream.
    
    syzbot managed to crash the kernel in tabledist() loading
    an empty distribution table.
    
            t = dist->table[rnd % dist->size];
    
    Simply return an error when such load is attempted.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit ca63b17bfa14d05bfd63e7374c4aaecc368869d4
Author: Shih-Yuan Lee (FourDollars) <fourdollars@debian.org>
Date:   Fri Sep 20 21:40:53 2019 +0800

    ALSA: hda - Add laptop imic fixup for ASUS M9V laptop
    
    commit 7b485d175631be676424aedb8cd2f66d0c93da78 upstream.
    
    The same fixup to enable laptop imic is needed for ASUS M9V with AD1986A
    codec like another HP machine.
    
    Signed-off-by: Shih-Yuan Lee (FourDollars) <fourdollars@debian.org>
    Link: https://lore.kernel.org/r/20190920134052.GA8035@localhost
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 0e0b9c1bf74dfd3020e4b53e403ca570a1e25d5a
Author: Laurent Vivier <lvivier@redhat.com>
Date:   Tue Sep 17 11:54:50 2019 +0200

    hwrng: core - don't wait on add_early_randomness()
    
    commit 78887832e76541f77169a24ac238fccb51059b63 upstream.
    
    add_early_randomness() is called by hwrng_register() when the
    hardware is added. If this hardware and its module are present
    at boot, and if there is no data available the boot hangs until
    data are available and can't be interrupted.
    
    For instance, in the case of virtio-rng, in some cases the host can be
    not able to provide enough entropy for all the guests.
    
    We can have two easy ways to reproduce the problem but they rely on
    misconfiguration of the hypervisor or the egd daemon:
    
    - if virtio-rng device is configured to connect to the egd daemon of the
    host but when the virtio-rng driver asks for data the daemon is not
    connected,
    
    - if virtio-rng device is configured to connect to the egd daemon of the
    host but the egd daemon doesn't provide data.
    
    The guest kernel will hang at boot until the virtio-rng driver provides
    enough data.
    
    To avoid that, call rng_get_data() in non-blocking mode (wait=0)
    from add_early_randomness().
    
    Signed-off-by: Laurent Vivier <lvivier@redhat.com>
    Fixes: d9e797261933 ("hwrng: add randomness to system from rng...")
    Reviewed-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit fa4fb29a16694477c90b9352f247b7a06b35462e
Author: David Howells <dhowells@redhat.com>
Date:   Thu Mar 21 10:08:08 2019 +0000

    hypfs: Fix error number left in struct pointer member
    
    commit b54c64f7adeb241423cd46598f458b5486b0375e upstream.
    
    In hypfs_fill_super(), if hypfs_create_update_file() fails,
    sbi->update_file is left holding an error number.  This is passed to
    hypfs_kill_super() which doesn't check for this.
    
    Fix this by not setting sbi->update_value until after we've checked for
    error.
    
    Fixes: 24bbb1faf3f0 ("[PATCH] s390_hypfs filesystem")
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    cc: linux-s390@vger.kernel.org
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d7f400b8cabb95604f084571927845651f110f6a
Author: Nathan Lynch <nathanl@linux.ibm.com>
Date:   Tue Sep 10 17:52:44 2019 -0500

    powerpc/pseries: correctly track irq state in default idle
    
    commit 92c94dfb69e350471473fd3075c74bc68150879e upstream.
    
    prep_irq_for_idle() is intended to be called before entering
    H_CEDE (and it is used by the pseries cpuidle driver). However the
    default pseries idle routine does not call it, leading to mismanaged
    lazy irq state when the cpuidle driver isn't in use. Manifestations of
    this include:
    
    * Dropped IPIs in the time immediately after a cpu comes
      online (before it has installed the cpuidle handler), making the
      online operation block indefinitely waiting for the new cpu to
      respond.
    
    * Hitting this WARN_ON in arch_local_irq_restore():
            /*
             * We should already be hard disabled here. We had bugs
             * where that wasn't the case so let's dbl check it and
             * warn if we are wrong. Only do that when IRQ tracing
             * is enabled as mfmsr() can be costly.
             */
            if (WARN_ON_ONCE(mfmsr() & MSR_EE))
                    __hard_irq_disable();
    
    Call prep_irq_for_idle() from pseries_lpar_idle() and honor its
    result.
    
    Fixes: 363edbe2614a ("powerpc: Default arch idle could cede processor on pseries")
    Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20190910225244.25056-1-nathanl@linux.ibm.com
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 9c64678adf6713cb86d5111c534f2d40805f0502
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Aug 3 11:51:18 2019 -0400

    configfs: fix a deadlock in configfs_symlink()
    
    commit 351e5d869e5ac10cb40c78b5f2d7dfc816ad4587 upstream.
    
    Configfs abuses symlink(2).  Unlike the normal filesystems, it
    wants the target resolved at symlink(2) time, like link(2) would've
    done.  The problem is that ->symlink() is called with the parent
    directory locked exclusive, so resolving the target inside the
    ->symlink() is easily deadlocked.
    
    Short of really ugly games in sys_symlink() itself, all we can
    do is to unlock the parent before resolving the target and
    relock it after.  However, that invalidates the checks done
    by the caller of ->symlink(), so we have to
            * check that dentry is still where it used to be
    (it couldn't have been moved, but it could've been unhashed)
            * recheck that it's still negative (somebody else
    might've successfully created a symlink with the same name
    while we were looking the target up)
            * recheck the permissions on the parent directory.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    [bwh: Backported to 3.16: open-code inode_{,un}lock()]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 0d589fdceb28b3d39523d1dd0d4ad959efb57d0f
Author: Denis Kenzior <denkenz@gmail.com>
Date:   Wed Aug 28 16:11:10 2019 -0500

    cfg80211: Purge frame registrations on iftype change
    
    commit c1d3ad84eae35414b6b334790048406bd6301b12 upstream.
    
    Currently frame registrations are not purged, even when changing the
    interface type.  This can lead to potentially weird situations where
    frames possibly not allowed on a given interface type remain registered
    due to the type switching happening after registration.
    
    The kernel currently relies on userspace apps to actually purge the
    registrations themselves, this is not something that the kernel should
    rely on.
    
    Add a call to cfg80211_mlme_purge_registrations() to forcefully remove
    any registrations left over prior to switching the iftype.
    
    Signed-off-by: Denis Kenzior <denkenz@gmail.com>
    Link: https://lore.kernel.org/r/20190828211110.15005-1-denkenz@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b5ba61084c7637ccebe4077254993c56881fda25
Author: Junaid Shahid <junaids@google.com>
Date:   Wed Aug 8 17:45:24 2018 -0700

    kvm: mmu: Don't read PDPTEs when paging is not enabled
    
    commit d35b34a9a70edae7ef923f100e51b8b5ae9fe899 upstream.
    
    kvm should not attempt to read guest PDPTEs when CR0.PG = 0 and
    CR4.PAE = 1.
    
    Signed-off-by: Junaid Shahid <junaids@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Sean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 34fbd8eef06551e10e980568836d28c1a42957f5
Author: Sean Christopherson <sean.j.christopherson@intel.com>
Date:   Tue Sep 3 16:36:45 2019 -0700

    KVM: x86: Manually calculate reserved bits when loading PDPTRS
    
    commit 16cfacc8085782dab8e365979356ce1ca87fd6cc upstream.
    
    Manually generate the PDPTR reserved bit mask when explicitly loading
    PDPTRs.  The reserved bits that are being tracked by the MMU reflect the
    current paging mode, which is unlikely to be PAE paging in the vast
    majority of flows that use load_pdptrs(), e.g. CR0 and CR4 emulation,
    __set_sregs(), etc...  This can cause KVM to incorrectly signal a bad
    PDPTR, or more likely, miss a reserved bit check and subsequently fail
    a VM-Enter due to a bad VMCS.GUEST_PDPTR.
    
    Add a one off helper to generate the reserved bits instead of sharing
    code across the MMU's calculations and the PDPTR emulation.  The PDPTR
    reserved bits are basically set in stone, and pushing a helper into
    the MMU's calculation adds unnecessary complexity without improving
    readability.
    
    Oppurtunistically fix/update the comment for load_pdptrs().
    
    Note, the buggy commit also introduced a deliberate functional change,
    "Also remove bit 5-6 from rsvd_bits_mask per latest SDM.", which was
    effectively (and correctly) reverted by commit cd9ae5fe47df ("KVM: x86:
    Fix page-tables reserved bits").  A bit of SDM archaeology shows that
    the SDM from late 2008 had a bug (likely a copy+paste error) where it
    listed bits 6:5 as AVL and A for PDPTEs used for 4k entries but reserved
    for 2mb entries.  I.e. the SDM contradicted itself, and bits 6:5 are and
    always have been reserved.
    
    Fixes: 20c466b56168d ("KVM: Use rsvd_bits_mask in load_pdptrs()")
    Cc: Nadav Amit <nadav.amit@gmail.com>
    Reported-by: Doug Reiland <doug.reiland@intel.com>
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    Reviewed-by: Peter Xu <peterx@redhat.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e1c192ee9b3f63dcf8aeead1ff646848e0c7e207
Author: Tiejun Chen <tiejun.chen@intel.com>
Date:   Mon Sep 1 18:44:04 2014 +0800

    KVM: mmio: cleanup kvm_set_mmio_spte_mask
    
    commit d143148383d0395539073dd6c2f25ddf6656bdcc upstream.
    
    Just reuse rsvd_bits() inside kvm_set_mmio_spte_mask()
    for slightly better code.
    
    Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    [bwh: Backported to 3.16 as dependency of commit 16cfacc80857
     "KVM: x86: Manually calculate reserved bits when loading PDPTRS"]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b392445d722202cbf332504abaea6e43ed57ccbf
Author: Nikolay Borisov <nborisov@suse.com>
Date:   Wed Sep 4 19:33:58 2019 +0300

    btrfs: Relinquish CPUs in btrfs_compare_trees
    
    commit 6af112b11a4bc1b560f60a618ac9c1dcefe9836e upstream.
    
    When doing any form of incremental send the parent and the child trees
    need to be compared via btrfs_compare_trees. This  can result in long
    loop chains without ever relinquishing the CPU. This causes softlockup
    detector to trigger when comparing trees with a lot of items. Example
    report:
    
    watchdog: BUG: soft lockup - CPU#0 stuck for 24s! [snapperd:16153]
    CPU: 0 PID: 16153 Comm: snapperd Not tainted 5.2.9-1-default #1 openSUSE Tumbleweed (unreleased)
    Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0 02/06/2015
    pstate: 40000005 (nZcv daif -PAN -UAO)
    pc : __ll_sc_arch_atomic_sub_return+0x14/0x20
    lr : btrfs_release_extent_buffer_pages+0xe0/0x1e8 [btrfs]
    sp : ffff00001273b7e0
    Call trace:
     __ll_sc_arch_atomic_sub_return+0x14/0x20
     release_extent_buffer+0xdc/0x120 [btrfs]
     free_extent_buffer.part.0+0xb0/0x118 [btrfs]
     free_extent_buffer+0x24/0x30 [btrfs]
     btrfs_release_path+0x4c/0xa0 [btrfs]
     btrfs_free_path.part.0+0x20/0x40 [btrfs]
     btrfs_free_path+0x24/0x30 [btrfs]
     get_inode_info+0xa8/0xf8 [btrfs]
     finish_inode_if_needed+0xe0/0x6d8 [btrfs]
     changed_cb+0x9c/0x410 [btrfs]
     btrfs_compare_trees+0x284/0x648 [btrfs]
     send_subvol+0x33c/0x520 [btrfs]
     btrfs_ioctl_send+0x8a0/0xaf0 [btrfs]
     btrfs_ioctl+0x199c/0x2288 [btrfs]
     do_vfs_ioctl+0x4b0/0x820
     ksys_ioctl+0x84/0xb8
     __arm64_sys_ioctl+0x28/0x38
     el0_svc_common.constprop.0+0x7c/0x188
     el0_svc_handler+0x34/0x90
     el0_svc+0x8/0xc
    
    Fix this by adding a call to cond_resched at the beginning of the main
    loop in btrfs_compare_trees.
    
    Fixes: 7069830a9e38 ("Btrfs: add btrfs_compare_trees function")
    Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
    Signed-off-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 3.16: adjust filename]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d93130205ac73c9b5a9e123d157b707ac3b386b3
Author: Filipe Manana <fdmanana@suse.com>
Date:   Mon Aug 12 19:14:29 2019 +0100

    Btrfs: fix use-after-free when using the tree modification log
    
    commit efad8a853ad2057f96664328a0d327a05ce39c76 upstream.
    
    At ctree.c:get_old_root(), we are accessing a root's header owner field
    after we have freed the respective extent buffer. This results in an
    use-after-free that can lead to crashes, and when CONFIG_DEBUG_PAGEALLOC
    is set, results in a stack trace like the following:
    
      [ 3876.799331] stack segment: 0000 [#1] SMP DEBUG_PAGEALLOC PTI
      [ 3876.799363] CPU: 0 PID: 15436 Comm: pool Not tainted 5.3.0-rc3-btrfs-next-54 #1
      [ 3876.799385] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-0-ga698c8995f-prebuilt.qemu.org 04/01/2014
      [ 3876.799433] RIP: 0010:btrfs_search_old_slot+0x652/0xd80 [btrfs]
      (...)
      [ 3876.799502] RSP: 0018:ffff9f08c1a2f9f0 EFLAGS: 00010286
      [ 3876.799518] RAX: ffff8dd300000000 RBX: ffff8dd85a7a9348 RCX: 000000038da26000
      [ 3876.799538] RDX: 0000000000000000 RSI: ffffe522ce368980 RDI: 0000000000000246
      [ 3876.799559] RBP: dae1922adadad000 R08: 0000000008020000 R09: ffffe522c0000000
      [ 3876.799579] R10: ffff8dd57fd788c8 R11: 000000007511b030 R12: ffff8dd781ddc000
      [ 3876.799599] R13: ffff8dd9e6240578 R14: ffff8dd6896f7a88 R15: ffff8dd688cf90b8
      [ 3876.799620] FS:  00007f23ddd97700(0000) GS:ffff8dda20200000(0000) knlGS:0000000000000000
      [ 3876.799643] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [ 3876.799660] CR2: 00007f23d4024000 CR3: 0000000710bb0005 CR4: 00000000003606f0
      [ 3876.799682] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [ 3876.799703] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [ 3876.799723] Call Trace:
      [ 3876.799735]  ? do_raw_spin_unlock+0x49/0xc0
      [ 3876.799749]  ? _raw_spin_unlock+0x24/0x30
      [ 3876.799779]  resolve_indirect_refs+0x1eb/0xc80 [btrfs]
      [ 3876.799810]  find_parent_nodes+0x38d/0x1180 [btrfs]
      [ 3876.799841]  btrfs_check_shared+0x11a/0x1d0 [btrfs]
      [ 3876.799870]  ? extent_fiemap+0x598/0x6e0 [btrfs]
      [ 3876.799895]  extent_fiemap+0x598/0x6e0 [btrfs]
      [ 3876.799913]  do_vfs_ioctl+0x45a/0x700
      [ 3876.799926]  ksys_ioctl+0x70/0x80
      [ 3876.799938]  ? trace_hardirqs_off_thunk+0x1a/0x20
      [ 3876.799953]  __x64_sys_ioctl+0x16/0x20
      [ 3876.799965]  do_syscall_64+0x62/0x220
      [ 3876.799977]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
      [ 3876.799993] RIP: 0033:0x7f23e0013dd7
      (...)
      [ 3876.800056] RSP: 002b:00007f23ddd96ca8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
      [ 3876.800078] RAX: ffffffffffffffda RBX: 00007f23d80210f8 RCX: 00007f23e0013dd7
      [ 3876.800099] RDX: 00007f23d80210f8 RSI: 00000000c020660b RDI: 0000000000000003
      [ 3876.800626] RBP: 000055fa2a2a2440 R08: 0000000000000000 R09: 00007f23ddd96d7c
      [ 3876.801143] R10: 00007f23d8022000 R11: 0000000000000246 R12: 00007f23ddd96d80
      [ 3876.801662] R13: 00007f23ddd96d78 R14: 00007f23d80210f0 R15: 00007f23ddd96d80
      (...)
      [ 3876.805107] ---[ end trace e53161e179ef04f9 ]---
    
    Fix that by saving the root's header owner field into a local variable
    before freeing the root's extent buffer, and then use that local variable
    when needed.
    
    Fixes: 30b0463a9394d9 ("Btrfs: fix accessing the root pointer in tree mod log functions")
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit fa781c303883d723d1b8e68b32b73e58b587a4fa
Author: Helge Deller <deller@gmx.de>
Date:   Thu Sep 5 16:44:17 2019 +0200

    parisc: Disable HP HSC-PCI Cards to prevent kernel crash
    
    commit 5fa1659105fac63e0f3c199b476025c2e04111ce upstream.
    
    The HP Dino PCI controller chip can be used in two variants: as on-board
    controller (e.g. in B160L), or on an Add-On card ("Card-Mode") to bridge
    PCI components to systems without a PCI bus, e.g. to a HSC/GSC bus.  One
    such Add-On card is the HP HSC-PCI Card which has one or more DEC Tulip
    PCI NIC chips connected to the on-card Dino PCI controller.
    
    Dino in Card-Mode has a big disadvantage: All PCI memory accesses need
    to go through the DINO_MEM_DATA register, so Linux drivers will not be
    able to use the ioremap() function. Without ioremap() many drivers will
    not work, one example is the tulip driver which then simply crashes the
    kernel if it tries to access the ports on the HP HSC card.
    
    This patch disables the HP HSC card if it finds one, and as such
    fixes the kernel crash on a HP D350/2 machine.
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Noticed-by: Phil Scarr <phil.scarr@pm.me>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2fa807f509e72c53cf68c732b668695f36c4db8f
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Wed Sep 4 11:54:20 2019 -0400

    HID: prodikeys: Fix general protection fault during probe
    
    commit 98375b86c79137416e9fd354177b85e768c16e56 upstream.
    
    The syzbot fuzzer provoked a general protection fault in the
    hid-prodikeys driver:
    
    kasan: CONFIG_KASAN_INLINE enabled
    kasan: GPF could be caused by NULL-ptr deref or user memory access
    general protection fault: 0000 [#1] SMP KASAN
    CPU: 0 PID: 12 Comm: kworker/0:1 Not tainted 5.3.0-rc5+ #28
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
    Google 01/01/2011
    Workqueue: usb_hub_wq hub_event
    RIP: 0010:pcmidi_submit_output_report drivers/hid/hid-prodikeys.c:300  [inline]
    RIP: 0010:pcmidi_set_operational drivers/hid/hid-prodikeys.c:558 [inline]
    RIP: 0010:pcmidi_snd_initialise drivers/hid/hid-prodikeys.c:686 [inline]
    RIP: 0010:pk_probe+0xb51/0xfd0 drivers/hid/hid-prodikeys.c:836
    Code: 0f 85 50 04 00 00 48 8b 04 24 4c 89 7d 10 48 8b 58 08 e8 b2 53 e4 fc
    48 8b 54 24 20 48 b8 00 00 00 00 00 fc ff df 48 c1 ea 03 <80> 3c 02 00 0f
    85 13 04 00 00 48 ba 00 00 00 00 00 fc ff df 49 8b
    
    The problem is caused by the fact that pcmidi_get_output_report() will
    return an error if the HID device doesn't provide the right sort of
    output report, but pcmidi_set_operational() doesn't bother to check
    the return code and assumes the function call always succeeds.
    
    This patch adds the missing check and aborts the probe operation if
    necessary.
    
    Reported-and-tested-by: syzbot+1088533649dafa1c9004@syzkaller.appspotmail.com
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit f631e928c09cc62f5123d817b71cb1ce7238ad36
Author: Eric Biggers <ebiggers@google.com>
Date:   Wed Aug 21 22:54:41 2019 -0700

    smack: use GFP_NOFS while holding inode_smack::smk_lock
    
    commit e5bfad3d7acc5702f32aafeb388362994f4d7bd0 upstream.
    
    inode_smack::smk_lock is taken during smack_d_instantiate(), which is
    called during a filesystem transaction when creating a file on ext4.
    Therefore to avoid a deadlock, all code that takes this lock must use
    GFP_NOFS, to prevent memory reclaim from waiting for the filesystem
    transaction to complete.
    
    Reported-by: syzbot+0eefc1e06a77d327a056@syzkaller.appspotmail.com
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
    [bwh: Backported to 3.16:
     - Drop change to smk_netlbl_mls(), where GFP_ATOMIC is used
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit eadea2cb3bae0dd512f1e2f5e5787560ac12e3fd
Author: Jann Horn <jannh@google.com>
Date:   Thu Jul 4 20:44:44 2019 +0200

    Smack: Don't ignore other bprm->unsafe flags if LSM_UNSAFE_PTRACE is set
    
    commit 3675f052b43ba51b99b85b073c7070e083f3e6fb upstream.
    
    There is a logic bug in the current smack_bprm_set_creds():
    If LSM_UNSAFE_PTRACE is set, but the ptrace state is deemed to be
    acceptable (e.g. because the ptracer detached in the meantime), the other
    ->unsafe flags aren't checked. As far as I can tell, this means that
    something like the following could work (but I haven't tested it):
    
     - task A: create task B with fork()
     - task B: set NO_NEW_PRIVS
     - task B: install a seccomp filter that makes open() return 0 under some
       conditions
     - task B: replace fd 0 with a malicious library
     - task A: attach to task B with PTRACE_ATTACH
     - task B: execve() a file with an SMACK64EXEC extended attribute
     - task A: while task B is still in the middle of execve(), exit (which
       destroys the ptrace relationship)
    
    Make sure that if any flags other than LSM_UNSAFE_PTRACE are set in
    bprm->unsafe, we reject the execve().
    
    Fixes: 5663884caab1 ("Smack: unify all ptrace accesses in the smack")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
    [bwh: Backported to 3.16: Ignore LSM_UNSAFE_PTRACE_CAP, which is also handled
     by the preceding if-statement.]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 77ce180d68beffd1af620d0121590e16683fc6b8
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Wed Sep 4 11:56:27 2019 -0400

    USB: usbcore: Fix slab-out-of-bounds bug during device reset
    
    commit 3dd550a2d36596a1b0ee7955da3b611c031d3873 upstream.
    
    The syzbot fuzzer provoked a slab-out-of-bounds error in the USB core:
    
    BUG: KASAN: slab-out-of-bounds in memcmp+0xa6/0xb0 lib/string.c:904
    Read of size 1 at addr ffff8881d175bed6 by task kworker/0:3/2746
    
    CPU: 0 PID: 2746 Comm: kworker/0:3 Not tainted 5.3.0-rc5+ #28
    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+0xca/0x13e lib/dump_stack.c:113
      print_address_description+0x6a/0x32c mm/kasan/report.c:351
      __kasan_report.cold+0x1a/0x33 mm/kasan/report.c:482
      kasan_report+0xe/0x12 mm/kasan/common.c:612
      memcmp+0xa6/0xb0 lib/string.c:904
      memcmp include/linux/string.h:400 [inline]
      descriptors_changed drivers/usb/core/hub.c:5579 [inline]
      usb_reset_and_verify_device+0x564/0x1300 drivers/usb/core/hub.c:5729
      usb_reset_device+0x4c1/0x920 drivers/usb/core/hub.c:5898
      rt2x00usb_probe+0x53/0x7af
    drivers/net/wireless/ralink/rt2x00/rt2x00usb.c:806
    
    The error occurs when the descriptors_changed() routine (called during
    a device reset) attempts to compare the old and new BOS and capability
    descriptors.  The length it uses for the comparison is the
    wTotalLength value stored in BOS descriptor, but this value is not
    necessarily the same as the length actually allocated for the
    descriptors.  If it is larger the routine will call memcmp() with a
    length that is too big, thus reading beyond the end of the allocated
    region and leading to this fault.
    
    The kernel reads the BOS descriptor twice: first to get the total
    length of all the capability descriptors, and second to read it along
    with all those other descriptors.  A malicious (or very faulty) device
    may send different values for the BOS descriptor fields each time.
    The memory area will be allocated using the wTotalLength value read
    the first time, but stored within it will be the value read the second
    time.
    
    To prevent this possibility from causing any errors, this patch
    modifies the BOS descriptor after it has been read the second time:
    It sets the wTotalLength field to the actual length of the descriptors
    that were read in and validated.  Then the memcpy() call, or any other
    code using these descriptors, will be able to rely on wTotalLength
    being valid.
    
    Reported-and-tested-by: syzbot+35f4d916c623118d576e@syzkaller.appspotmail.com
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/Pine.LNX.4.44L0.1909041154260.1722-100000@iolanthe.rowland.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit bb459b7839db229281ba3ff36a86904b1053b911
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Mon Aug 26 22:13:25 2019 +0900

    /dev/mem: Bail out upon SIGKILL.
    
    commit 8619e5bdeee8b2c685d686281f2d2a6017c4bc15 upstream.
    
    syzbot found that a thread can stall for minutes inside read_mem() or
    write_mem() after that thread was killed by SIGKILL [1]. Reading from
    iomem areas of /dev/mem can be slow, depending on the hardware.
    While reading 2GB at one read() is legal, delaying termination of killed
    thread for minutes is bad. Thus, allow reading/writing /dev/mem and
    /dev/kmem to be preemptible and killable.
    
      [ 1335.912419][T20577] read_mem: sz=4096 count=2134565632
      [ 1335.943194][T20577] read_mem: sz=4096 count=2134561536
      [ 1335.978280][T20577] read_mem: sz=4096 count=2134557440
      [ 1336.011147][T20577] read_mem: sz=4096 count=2134553344
      [ 1336.041897][T20577] read_mem: sz=4096 count=2134549248
    
    Theoretically, reading/writing /dev/mem and /dev/kmem can become
    "interruptible". But this patch chose "killable". Future patch will make
    them "interruptible" so that we can revert to "killable" if some program
    regressed.
    
    [1] https://syzkaller.appspot.com/bug?id=a0e3436829698d5824231251fad9d8e998f94f5e
    
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Reported-by: syzbot <syzbot+8ab2d0f39fb79fe6ca40@syzkaller.appspotmail.com>
    Link: https://lore.kernel.org/r/1566825205-10703-1-git-send-email-penguin-kernel@I-love.SAKURA.ne.jp
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d150b5caa376d2ee284c4fbb340debf3c55e75ee
Author: Tokunori Ikegami <ikegami.t@gmail.com>
Date:   Tue Aug 6 04:03:18 2019 +0900

    mtd: cfi_cmdset_0002: Use chip_good() to retry in do_write_oneword()
    
    commit 37c673ade35c707d50583b5b25091ff8ebdeafd7 upstream.
    
    As reported by the OpenWRT team, write requests sometimes fail on some
    platforms.
    Currently to check the state chip_ready() is used correctly as described by
    the flash memory S29GL256P11TFI01 datasheet.
    Also chip_good() is used to check if the write is succeeded and it was
    implemented by the commit fb4a90bfcd6d8 ("[MTD] CFI-0002 - Improve error
    checking").
    But actually the write failure is caused on some platforms and also it can
    be fixed by using chip_good() to check the state and retry instead.
    Also it seems that it is caused after repeated about 1,000 times to retry
    the write one word with the reset command.
    By using chip_good() to check the state to be done it can be reduced the
    retry with reset.
    It is depended on the actual flash chip behavior so the root cause is
    unknown.
    
    Cc: Chris Packham <chris.packham@alliedtelesis.co.nz>
    Cc: Joakim Tjernlund <Joakim.Tjernlund@infinera.com>
    Cc: linux-mtd@lists.infradead.org
    Reported-by: Fabio Bettoni <fbettoni@gmail.com>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
    Signed-off-by: Tokunori Ikegami <ikegami.t@gmail.com>
    [vigneshr@ti.com: Fix a checkpatch warning]
    Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
    [bwh: Backported to 3.16:
     - chip_good() doesn't take a chip parameter
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 254388cbed7abc66f47954144014d1c8ad7817f8
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sun Aug 18 12:03:23 2019 -0300

    media: sn9c20x: Add MSI MS-1039 laptop to flip_dmi_table
    
    commit 7e0bb5828311f811309bed5749528ca04992af2f upstream.
    
    Like a bunch of other MSI laptops the MS-1039 uses a 0c45:627b
    SN9C201 + OV7660 webcam which is mounted upside down.
    
    Add it to the sn9c20x flip_dmi_table to deal with this.
    
    Reported-by: Rui Salvaterra <rsalvaterra@gmail.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7e89264eddda40ada74c75e440b96d112e0453e3
Author: Rakesh Pandit <rakesh@tuxera.com>
Date:   Thu Aug 22 22:53:46 2019 -0400

    ext4: fix warning inside ext4_convert_unwritten_extents_endio
    
    commit e3d550c2c4f2f3dba469bc3c4b83d9332b4e99e1 upstream.
    
    Really enable warning when CONFIG_EXT4_DEBUG is set and fix missing
    first argument.  This was introduced in commit ff95ec22cd7f ("ext4:
    add warning to ext4_convert_unwritten_extents_endio") and splitting
    extents inside endio would trigger it.
    
    Fixes: ff95ec22cd7f ("ext4: add warning to ext4_convert_unwritten_extents_endio")
    Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 696ed92b40f76d559cc376105e1bad0dfac3e611
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Wed Aug 21 13:27:12 2019 -0400

    HID: hidraw: Fix invalid read in hidraw_ioctl
    
    commit 416dacb819f59180e4d86a5550052033ebb6d72c upstream.
    
    The syzbot fuzzer has reported a pair of problems in the
    hidraw_ioctl() function: slab-out-of-bounds read and use-after-free
    read.  An example of the first:
    
    BUG: KASAN: slab-out-of-bounds in strlen+0x79/0x90 lib/string.c:525
    Read of size 1 at addr ffff8881c8035f38 by task syz-executor.4/2833
    
    CPU: 1 PID: 2833 Comm: syz-executor.4 Not tainted 5.3.0-rc2+ #1
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
    Google 01/01/2011
    Call Trace:
      __dump_stack lib/dump_stack.c:77 [inline]
      dump_stack+0xca/0x13e lib/dump_stack.c:113
      print_address_description+0x6a/0x32c mm/kasan/report.c:351
      __kasan_report.cold+0x1a/0x33 mm/kasan/report.c:482
      kasan_report+0xe/0x12 mm/kasan/common.c:612
      strlen+0x79/0x90 lib/string.c:525
      strlen include/linux/string.h:281 [inline]
      hidraw_ioctl+0x245/0xae0 drivers/hid/hidraw.c:446
      vfs_ioctl fs/ioctl.c:46 [inline]
      file_ioctl fs/ioctl.c:509 [inline]
      do_vfs_ioctl+0xd2d/0x1330 fs/ioctl.c:696
      ksys_ioctl+0x9b/0xc0 fs/ioctl.c:713
      __do_sys_ioctl fs/ioctl.c:720 [inline]
      __se_sys_ioctl fs/ioctl.c:718 [inline]
      __x64_sys_ioctl+0x6f/0xb0 fs/ioctl.c:718
      do_syscall_64+0xb7/0x580 arch/x86/entry/common.c:296
      entry_SYSCALL_64_after_hwframe+0x49/0xbe
    RIP: 0033:0x459829
    Code: fd b7 fb ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 48 89 f8 48 89 f7
    48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff
    ff 0f 83 cb b7 fb ff c3 66 2e 0f 1f 84 00 00 00 00
    RSP: 002b:00007f7a68f6dc78 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
    RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 0000000000459829
    RDX: 0000000000000000 RSI: 0000000080404805 RDI: 0000000000000004
    RBP: 000000000075bf20 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 00007f7a68f6e6d4
    R13: 00000000004c21de R14: 00000000004d5620 R15: 00000000ffffffff
    
    The two problems have the same cause: hidraw_ioctl() fails to test
    whether the device has been removed.  This patch adds the missing test.
    
    Reported-and-tested-by: syzbot+5a6c4ec678a0c6ee84ba@syzkaller.appspotmail.com
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5f1ff0c72deb91961df0ba31436fc22dab411fc2
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Tue Aug 13 16:01:02 2019 +0200

    can: mcp251x: mcp251x_hw_reset(): allow more time after a reset
    
    commit d84ea2123f8d27144e3f4d58cd88c9c6ddc799de upstream.
    
    Some boards take longer than 5ms to power up after a reset, so allow
    some retries attempts before giving up.
    
    Fixes: ff06d611a31c ("can: mcp251x: Improve mcp251x_hw_reset()")
    Tested-by: Sean Nyekjaer <sean@geanix.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 6a5a5b347ca18a9ee6f93899f62c8e3725fe8a91
Author: Nathan Lynch <nathanl@linux.ibm.com>
Date:   Fri Aug 2 14:29:24 2019 -0500

    powerpc/rtas: use device model APIs and serialization during LPM
    
    commit a6717c01ddc259f6f73364779df058e2c67309f8 upstream.
    
    The LPAR migration implementation and userspace-initiated cpu hotplug
    can interleave their executions like so:
    
    1. Set cpu 7 offline via sysfs.
    
    2. Begin a partition migration, whose implementation requires the OS
       to ensure all present cpus are online; cpu 7 is onlined:
    
         rtas_ibm_suspend_me -> rtas_online_cpus_mask -> cpu_up
    
       This sets cpu 7 online in all respects except for the cpu's
       corresponding struct device; dev->offline remains true.
    
    3. Set cpu 7 online via sysfs. _cpu_up() determines that cpu 7 is
       already online and returns success. The driver core (device_online)
       sets dev->offline = false.
    
    4. The migration completes and restores cpu 7 to offline state:
    
         rtas_ibm_suspend_me -> rtas_offline_cpus_mask -> cpu_down
    
    This leaves cpu7 in a state where the driver core considers the cpu
    device online, but in all other respects it is offline and
    unused. Attempts to online the cpu via sysfs appear to succeed but the
    driver core actually does not pass the request to the lower-level
    cpuhp support code. This makes the cpu unusable until the cpu device
    is manually set offline and then online again via sysfs.
    
    Instead of directly calling cpu_up/cpu_down, the migration code should
    use the higher-level device core APIs to maintain consistent state and
    serialize operations.
    
    Fixes: 120496ac2d2d ("powerpc: Bring all threads online prior to migration/hibernation")
    Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com>
    Reviewed-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20190802192926.19277-2-nathanl@linux.ibm.com
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 70eefbdc32aa3e75c38ec60ce7493476eb0cb36f
Author: Sean Young <sean@mess.org>
Date:   Tue Aug 13 13:45:09 2019 -0300

    media: tm6000: double free if usb disconnect while streaming
    
    commit 699bf94114151aae4dceb2d9dbf1a6312839dcae upstream.
    
    The usb_bulk_urb will kfree'd on disconnect, so ensure the pointer is set
    to NULL after each free.
    
    stop stream
    urb killing
    urb buffer free
    tm6000: got start feed request tm6000_start_feed
    tm6000: got start stream request tm6000_start_stream
    tm6000: pipe reset
    tm6000: got start feed request tm6000_start_feed
    tm6000: got start feed request tm6000_start_feed
    tm6000: got start feed request tm6000_start_feed
    tm6000: got start feed request tm6000_start_feed
    tm6000: IR URB failure: status: -71, length 0
    xhci_hcd 0000:00:14.0: ERROR unknown event type 37
    xhci_hcd 0000:00:14.0: ERROR unknown event type 37
    tm6000:  error tm6000_urb_received
    usb 1-2: USB disconnect, device number 5
    tm6000: disconnecting tm6000 #0
    ==================================================================
    BUG: KASAN: use-after-free in dvb_fini+0x75/0x140 [tm6000_dvb]
    Read of size 8 at addr ffff888241044060 by task kworker/2:0/22
    
    CPU: 2 PID: 22 Comm: kworker/2:0 Tainted: G        W         5.3.0-rc4+ #1
    Hardware name: LENOVO 20KHCTO1WW/20KHCTO1WW, BIOS N23ET65W (1.40 ) 07/02/2019
    Workqueue: usb_hub_wq hub_event
    Call Trace:
     dump_stack+0x9a/0xf0
     print_address_description.cold+0xae/0x34f
     __kasan_report.cold+0x75/0x93
     ? tm6000_fillbuf+0x390/0x3c0 [tm6000_alsa]
     ? dvb_fini+0x75/0x140 [tm6000_dvb]
     kasan_report+0xe/0x12
     dvb_fini+0x75/0x140 [tm6000_dvb]
     tm6000_close_extension+0x51/0x80 [tm6000]
     tm6000_usb_disconnect.cold+0xd4/0x105 [tm6000]
     usb_unbind_interface+0xe4/0x390
     device_release_driver_internal+0x121/0x250
     bus_remove_device+0x197/0x260
     device_del+0x268/0x550
     ? __device_links_no_driver+0xd0/0xd0
     ? usb_remove_ep_devs+0x30/0x3b
     usb_disable_device+0x122/0x400
     usb_disconnect+0x153/0x430
     hub_event+0x800/0x1e40
     ? trace_hardirqs_on_thunk+0x1a/0x20
     ? hub_port_debounce+0x1f0/0x1f0
     ? retint_kernel+0x10/0x10
     ? lock_is_held_type+0xf1/0x130
     ? hub_port_debounce+0x1f0/0x1f0
     ? process_one_work+0x4ae/0xa00
     process_one_work+0x4ba/0xa00
     ? pwq_dec_nr_in_flight+0x160/0x160
     ? do_raw_spin_lock+0x10a/0x1d0
     worker_thread+0x7a/0x5c0
     ? process_one_work+0xa00/0xa00
     kthread+0x1d5/0x200
     ? kthread_create_worker_on_cpu+0xd0/0xd0
     ret_from_fork+0x3a/0x50
    
    Allocated by task 2682:
     save_stack+0x1b/0x80
     __kasan_kmalloc.constprop.0+0xc2/0xd0
     usb_alloc_urb+0x28/0x60
     tm6000_start_feed+0x10a/0x300 [tm6000_dvb]
     dmx_ts_feed_start_filtering+0x86/0x120 [dvb_core]
     dvb_dmxdev_start_feed+0x121/0x180 [dvb_core]
     dvb_dmxdev_filter_start+0xcb/0x540 [dvb_core]
     dvb_demux_do_ioctl+0x7ed/0x890 [dvb_core]
     dvb_usercopy+0x97/0x1f0 [dvb_core]
     dvb_demux_ioctl+0x11/0x20 [dvb_core]
     do_vfs_ioctl+0x5d8/0x9d0
     ksys_ioctl+0x5e/0x90
     __x64_sys_ioctl+0x3d/0x50
     do_syscall_64+0x74/0xe0
     entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    Freed by task 22:
     save_stack+0x1b/0x80
     __kasan_slab_free+0x12c/0x170
     kfree+0xfd/0x3a0
     xhci_giveback_urb_in_irq+0xfe/0x230
     xhci_td_cleanup+0x276/0x340
     xhci_irq+0x1129/0x3720
     __handle_irq_event_percpu+0x6e/0x420
     handle_irq_event_percpu+0x6f/0x100
     handle_irq_event+0x55/0x84
     handle_edge_irq+0x108/0x3b0
     handle_irq+0x2e/0x40
     do_IRQ+0x83/0x1a0
    
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 4f0a684f9d14e81f8ade8236b01518fb5169b978
Author: Luis Araneda <luaraneda@gmail.com>
Date:   Thu Aug 8 08:52:43 2019 -0400

    ARM: zynq: Use memcpy_toio instead of memcpy on smp bring-up
    
    commit b7005d4ef4f3aa2dc24019ffba03a322557ac43d upstream.
    
    This fixes a kernel panic on memcpy when
    FORTIFY_SOURCE is enabled.
    
    The initial smp implementation on commit aa7eb2bb4e4a
    ("arm: zynq: Add smp support")
    used memcpy, which worked fine until commit ee333554fed5
    ("ARM: 8749/1: Kconfig: Add ARCH_HAS_FORTIFY_SOURCE")
    enabled overflow checks at runtime, producing a read
    overflow panic.
    
    The computed size of memcpy args are:
    - p_size (dst): 4294967295 = (size_t) -1
    - q_size (src): 1
    - size (len): 8
    
    Additionally, the memory is marked as __iomem, so one of
    the memcpy_* functions should be used for read/write.
    
    Fixes: aa7eb2bb4e4a ("arm: zynq: Add smp support")
    Signed-off-by: Luis Araneda <luaraneda@gmail.com>
    Signed-off-by: Michal Simek <michal.simek@xilinx.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b1dfec05ec4413c62fa553e9740a98f443c9487b
Author: Colin Ian King <colin.king@canonical.com>
Date:   Mon Aug 12 14:29:38 2019 -0400

    ext4: set error return correctly when ext4_htree_store_dirent fails
    
    commit 7a14826ede1d714f0bb56de8167c0e519041eeda upstream.
    
    Currently when the call to ext4_htree_store_dirent fails the error return
    variable 'ret' is is not being set to the error code and variable count is
    instead, hence the error code is not being returned.  Fix this by assigning
    ret to the error return code.
    
    Addresses-Coverity: ("Unused value")
    Fixes: 8af0f0822797 ("ext4: fix readdir error in the case of inline_data+dir_index")
    Signed-off-by: Colin Ian King <colin.king@canonical.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 54591ff3f953d8eb120443668ffb59bd60e8cd74
Author: Xiaofei Tan <tanxiaofei@huawei.com>
Date:   Fri Jul 26 09:43:37 2019 +0800

    efi: cper: print AER info of PCIe fatal error
    
    commit b194a77fcc4001dc40aecdd15d249648e8a436d1 upstream.
    
    AER info of PCIe fatal error is not printed in the current driver.
    Because APEI driver will panic directly for fatal error, and can't
    run to the place of printing AER info.
    
    An example log is as following:
    {763}[Hardware Error]: Hardware error from APEI Generic Hardware Error Source: 11
    {763}[Hardware Error]: event severity: fatal
    {763}[Hardware Error]:  Error 0, type: fatal
    {763}[Hardware Error]:   section_type: PCIe error
    {763}[Hardware Error]:   port_type: 0, PCIe end point
    {763}[Hardware Error]:   version: 4.0
    {763}[Hardware Error]:   command: 0x0000, status: 0x0010
    {763}[Hardware Error]:   device_id: 0000:82:00.0
    {763}[Hardware Error]:   slot: 0
    {763}[Hardware Error]:   secondary_bus: 0x00
    {763}[Hardware Error]:   vendor_id: 0x8086, device_id: 0x10fb
    {763}[Hardware Error]:   class_code: 000002
    Kernel panic - not syncing: Fatal hardware error!
    
    This issue was imported by the patch, '37448adfc7ce ("aerdrv: Move
    cper_print_aer() call out of interrupt context")'. To fix this issue,
    this patch adds print of AER info in cper_print_pcie() for fatal error.
    
    Here is the example log after this patch applied:
    {24}[Hardware Error]: Hardware error from APEI Generic Hardware Error Source: 10
    {24}[Hardware Error]: event severity: fatal
    {24}[Hardware Error]:  Error 0, type: fatal
    {24}[Hardware Error]:   section_type: PCIe error
    {24}[Hardware Error]:   port_type: 0, PCIe end point
    {24}[Hardware Error]:   version: 4.0
    {24}[Hardware Error]:   command: 0x0546, status: 0x4010
    {24}[Hardware Error]:   device_id: 0000:01:00.0
    {24}[Hardware Error]:   slot: 0
    {24}[Hardware Error]:   secondary_bus: 0x00
    {24}[Hardware Error]:   vendor_id: 0x15b3, device_id: 0x1019
    {24}[Hardware Error]:   class_code: 000002
    {24}[Hardware Error]:   aer_uncor_status: 0x00040000, aer_uncor_mask: 0x00000000
    {24}[Hardware Error]:   aer_uncor_severity: 0x00062010
    {24}[Hardware Error]:   TLP Header: 000000c0 01010000 00000001 00000000
    Kernel panic - not syncing: Fatal hardware error!
    
    Fixes: 37448adfc7ce ("aerdrv: Move cper_print_aer() call out of interrupt context")
    Signed-off-by: Xiaofei Tan <tanxiaofei@huawei.com>
    Reviewed-by: James Morse <james.morse@arm.com>
    [ardb: put parens around terms of && operator]
    Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit fa9cdfa86181196e566bb1ada4ba8accd591decc
Author: Johannes Berg <johannes@sipsolutions.net>
Date:   Mon Jul 29 09:14:22 2019 +0200

    ALSA: aoa: onyx: always initialize register read value
    
    commit f474808acb3c4b30552d9c59b181244e0300d218 upstream.
    
    A lot of places in the driver use onyx_read_register() without
    checking the return value, and it's been working OK for ~10 years
    or so, so probably never fails ... Rather than trying to check the
    return value everywhere, which would be relatively intrusive, at
    least make sure we don't use an uninitialized value.
    
    Fixes: f3d9478b2ce4 ("[ALSA] snd-aoa: add snd-aoa")
    Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
    Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit ae9efb9abd7575453a1e2d1a96cb6d32f34ddde9
Author: Douglas Anderson <dianders@chromium.org>
Date:   Mon Jul 22 11:24:36 2019 -0700

    video: of: display_timing: Add of_node_put() in of_get_display_timing()
    
    commit 4faba50edbcc1df467f8f308893edc3fdd95536e upstream.
    
    From code inspection it can be seen that of_get_display_timing() is
    lacking an of_node_put().  Add it.
    
    Fixes: ffa3fd21de8a ("videomode: implement public of_get_display_timing()")
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
    Cc: Thierry Reding <thierry.reding@gmail.com>
    Cc: David Airlie <airlied@linux.ie>
    Cc: Philipp Zabel <p.zabel@pengutronix.de>
    Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
    Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190722182439.44844-2-dianders@chromium.org
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 4186d92d7e25b17b66de41c0548f76badc50eb5b
Author: Grzegorz Halat <ghalat@redhat.com>
Date:   Fri Jun 28 14:28:13 2019 +0200

    x86/reboot: Always use NMI fallback when shutdown via reboot vector IPI fails
    
    commit 747d5a1bf293dcb33af755a6d285d41b8c1ea010 upstream.
    
    A reboot request sends an IPI via the reboot vector and waits for all other
    CPUs to stop. If one or more CPUs are in critical regions with interrupts
    disabled then the IPI is not handled on those CPUs and the shutdown hangs
    if native_stop_other_cpus() is called with the wait argument set.
    
    Such a situation can happen when one CPU was stopped within a lock held
    section and another CPU is trying to acquire that lock with interrupts
    disabled. There are other scenarios which can cause such a lockup as well.
    
    In theory the shutdown should be attempted by an NMI IPI after the timeout
    period elapsed. Though the wait loop after sending the reboot vector IPI
    prevents this. It checks the wait request argument and the timeout. If wait
    is set, which is true for sys_reboot() then it won't fall through to the
    NMI shutdown method after the timeout period has finished.
    
    This was an oversight when the NMI shutdown mechanism was added to handle
    the 'reboot IPI is not working' situation. The mechanism was added to deal
    with stuck panic shutdowns, which do not have the wait request set, so the
    'wait request' case was probably not considered.
    
    Remove the wait check from the post reboot vector IPI wait loop and enforce
    that the wait loop in the NMI fallback path is invoked even if NMI IPIs are
    disabled or the registration of the NMI handler fails. That second wait
    loop will then hang if not all CPUs shutdown and the wait argument is set.
    
    [ tglx: Avoid the hard to parse line break in the NMI fallback path,
            add comments and massage the changelog ]
    
    Fixes: 7d007d21e539 ("x86/reboot: Use NMI to assist in shutting down if IRQ fails")
    Signed-off-by: Grzegorz Halat <ghalat@redhat.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Don Zickus <dzickus@redhat.com>
    Link: https://lkml.kernel.org/r/20190628122813.15500-1-ghalat@redhat.com
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 36129023c7ee588b24cd663217926fc3156ff197
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Tue Jul 16 22:42:18 2019 +0800

    libertas_tf: Use correct channel range in lbtf_geo_init
    
    commit 2ec4ad49b98e4a14147d04f914717135eca7c8b1 upstream.
    
    It seems we should use 'range' instead of 'priv->range'
    in lbtf_geo_init(), because 'range' is the corret one
    related to current regioncode.
    
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Fixes: 691cdb49388b ("libertas_tf: command helper functions for libertas_tf")
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 9bffc2e4f74756168b7f8a5ed67c8b667b34d23f
Author: Marko Kohtala <marko.kohtala@okoko.fi>
Date:   Tue Jun 18 10:41:08 2019 +0300

    video: ssd1307fb: Start page range at page_offset
    
    commit dd9782834dd9dde3624ff1acea8859f3d3e792d4 upstream.
    
    The page_offset was only applied to the end of the page range. This caused
    the display updates to cause a scrolling effect on the display because the
    amount of data written to the display did not match the range display
    expected.
    
    Fixes: 301bc0675b67 ("video: ssd1307fb: Make use of horizontal addressing mode")
    Signed-off-by: Marko Kohtala <marko.kohtala@okoko.fi>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Rob Herring <robh+dt@kernel.org>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: David Airlie <airlied@linux.ie>
    Cc: Michal Vokáč <michal.vokac@ysoft.com>
    Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190618074111.9309-4-marko.kohtala@okoko.fi
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e354d535f45d10dc8448c52ba468497497c29753
Author: Prabhakar Lad <prabhakar.csengg@gmail.com>
Date:   Thu Jan 15 19:05:37 2015 +0000

    fbdev: ssd1307fb: return proper error code if write command fails
    
    commit 5b72ae9a901cbfbe632570f278486142b037fe51 upstream.
    
    this patch fixes ssd1307fb_ssd1306_init() function to return
    proper error codes in case of failures.
    
    Signed-off-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 94805f6e4c08d38b5c81a065c0d80251e5ca728d
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Fri Jun 28 08:14:53 2019 -0400

    media: dib0700: fix link error for dibx000_i2c_set_speed
    
    commit 765bb8610d305ee488b35d07e2a04ae52fb2df9c upstream.
    
    When CONFIG_DVB_DIB9000 is disabled, we can still compile code that
    now fails to link against dibx000_i2c_set_speed:
    
    drivers/media/usb/dvb-usb/dib0700_devices.o: In function `dib01x0_pmu_update.constprop.7':
    dib0700_devices.c:(.text.unlikely+0x1c9c): undefined reference to `dibx000_i2c_set_speed'
    
    The call sites are both through dib01x0_pmu_update(), which gets passed
    an 'i2c' pointer from dib9000_get_i2c_master(), which has returned
    NULL. Checking this pointer seems to be a good idea anyway, and it avoids
    the link failure in most cases.
    
    Sean Young found another case that is not fixed by that, where certain
    gcc versions leave an unused function in place that causes the link error,
    but adding an explict IS_ENABLED() check also solves this.
    
    Fixes: b7f54910ce01 ("V4L/DVB (4647): Added module for DiB0700 based devices")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d31d97d1b4a3610ce72c3dbe1db1c4081f256796
Author: Nick Stoughton <nstoughton@logitech.com>
Date:   Wed Jul 17 14:56:06 2019 -0700

    leds: leds-lp5562 allow firmware files up to the maximum length
    
    commit ed2abfebb041473092b41527903f93390d38afa7 upstream.
    
    Firmware files are in ASCII, using 2 hex characters per byte. The
    maximum length of a firmware string is therefore
    
    16 (commands) * 2 (bytes per command) * 2 (characters per byte) = 64
    
    Fixes: ff45262a85db ("leds: add new LP5562 LED driver")
    Signed-off-by: Nick Stoughton <nstoughton@logitech.com>
    Acked-by: Pavel Machek <pavel@ucw.cz>
    Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 92279a1a37a17d8e846ffc89d7681c322be2b517
Author: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
Date:   Fri Jul 19 10:05:31 2019 +0000

    ASoC: sgtl5000: Improve VAG power and mute control
    
    commit b1f373a11d25fc9a5f7679c9b85799fe09b0dc4a upstream.
    
    VAG power control is improved to fit the manual [1]. This patch fixes as
    minimum one bug: if customer muxes Headphone to Line-In right after boot,
    the VAG power remains off that leads to poor sound quality from line-in.
    
    I.e. after boot:
      - Connect sound source to Line-In jack;
      - Connect headphone to HP jack;
      - Run following commands:
      $ amixer set 'Headphone' 80%
      $ amixer set 'Headphone Mux' LINE_IN
    
    Change VAG power on/off control according to the following algorithm:
      - turn VAG power ON on the 1st incoming event.
      - keep it ON if there is any active VAG consumer (ADC/DAC/HP/Line-In).
      - turn VAG power OFF when there is the latest consumer's pre-down event
        come.
      - always delay after VAG power OFF to avoid pop.
      - delay after VAG power ON if the initiative consumer is Line-In, this
        prevents pop during line-in muxing.
    
    According to the data sheet [1], to avoid any pops/clicks,
    the outputs should be muted during input/output
    routing changes.
    
    [1] https://www.nxp.com/docs/en/data-sheet/SGTL5000.pdf
    
    Fixes: 9b34e6cc3bc2 ("ASoC: Add Freescale SGTL5000 codec support")
    Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
    Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
    Reviewed-by: Fabio Estevam <festevam@gmail.com>
    Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com>
    Link: https://lore.kernel.org/r/20190719100524.23300-3-oleksandr.suvorov@toradex.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    [bwh: Backported to 3.16:
     - Use codec API instead of component API
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 77bca5f8935ec8f7294cd5c573335214fe0d971e
Author: Jean-Michel Hautbois <jhautbois@gmail.com>
Date:   Thu Dec 17 11:07:23 2015 +0100

    ASoC: sgtl5000: fix VAG power up timing
    
    commit c803cc2dcd722e08020c1ba63bb5ceece4a19fdb upstream.
    
    When power up, a "pop" is heard on line-in and mic-in.
    An analysis of the PCM shows it lasts ~400ms
    and looks like a filter response.
    VAG power up should be delayed by 400ms as VAG power down is.
    
    Signed-off-by: Jean-Michel Hautbois <jean-michel.hautbois@veo-labs.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7f5f2ea7b4722704ab98e8da1d72fc6c19a90571
Author: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
Date:   Fri Jul 19 10:05:30 2019 +0000

    ASoC: Define a set of DAPM pre/post-up events
    
    commit cfc8f568aada98f9608a0a62511ca18d647613e2 upstream.
    
    Prepare to use SND_SOC_DAPM_PRE_POST_PMU definition to
    reduce coming code size and make it more readable.
    
    Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
    Reviewed-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
    Reviewed-by: Igor Opaniuk <igor.opaniuk@toradex.com>
    Reviewed-by: Fabio Estevam <festevam@gmail.com>
    Link: https://lore.kernel.org/r/20190719100524.23300-2-oleksandr.suvorov@toradex.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>