commit 92f17c867833bbfdaced034629afb8e30a19e882
Author: Ben Hutchings <ben@decadent.org.uk>
Date:   Tue Apr 28 19:03:53 2020 +0100

    Linux 3.16.83

commit b74665947b7399bd222346e2d33afd51810d0444
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Sun Mar 8 19:07:17 2020 +0100

    futex: Unbreak futex hashing
    
    commit 8d67743653dce5a0e7aa500fcccb237cde7ad88e upstream.
    
    The recent futex inode life time fix changed the ordering of the futex key
    union struct members, but forgot to adjust the hash function accordingly,
    
    As a result the hashing omits the leading 64bit and even hashes beyond the
    futex key causing a bad hash distribution which led to a ~100% performance
    regression.
    
    Hand in the futex key pointer instead of a random struct member and make
    the size calculation based of the struct offset.
    
    Fixes: 8019ad13ef7f ("futex: Fix inode life-time issue")
    Reported-by: Rong Chen <rong.a.chen@intel.com>
    Decoded-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Rong Chen <rong.a.chen@intel.com>
    Link: https://lkml.kernel.org/r/87h7yy90ve.fsf@nanos.tec.linutronix.de
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    Cc: Jann Horn <jannh@google.com>

commit 87903c4d3a9b422cd1d254b693e84b95f9df0706
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Wed Mar 4 11:28:31 2020 +0100

    futex: Fix inode life-time issue
    
    commit 8019ad13ef7f64be44d4f892af9c840179009254 upstream.
    
    As reported by Jann, ihold() does not in fact guarantee inode
    persistence. And instead of making it so, replace the usage of inode
    pointers with a per boot, machine wide, unique inode identifier.
    
    This sequence number is global, but shared (file backed) futexes are
    rare enough that this should not become a performance issue.
    
    Reported-by: Jann Horn <jannh@google.com>
    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16: Use atomic64_cmpxchg() instead of the
     _relaxed() variant which we don't have]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 08fadc32ce6239dc75fd5e869590e29bc62bbc28
Author: Richard Palethorpe <rpalethorpe@suse.com>
Date:   Wed Apr 1 12:06:39 2020 +0200

    slcan: Don't transmit uninitialized stack data in padding
    
    commit b9258a2cece4ec1f020715fe3554bc2e360f6264 upstream.
    
    struct can_frame contains some padding which is not explicitly zeroed in
    slc_bump. This uninitialized data will then be transmitted if the stack
    initialization hardening feature is not enabled (CONFIG_INIT_STACK_ALL).
    
    This commit just zeroes the whole struct including the padding.
    
    Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
    Fixes: a1044e36e457 ("can: add slcan driver for serial/USB-serial CAN adapters")
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Cc: linux-can@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Cc: security@kernel.org
    Cc: wg@grandegger.com
    Cc: mkl@pengutronix.de
    Cc: davem@davemloft.net
    Acked-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 596ba660d5c010ca8c3f9e3f60d530423593bee7
Author: Shuah Khan <shuah@kernel.org>
Date:   Fri Jun 10 14:37:23 2016 -0300

    media: fix media devnode ioctl/syscall and unregister race
    
    commit 6f0dd24a084a17f9984dd49dffbf7055bf123993 upstream.
    
    Media devnode open/ioctl could be in progress when media device unregister
    is initiated. System calls and ioctls check media device registered status
    at the beginning, however, there is a window where unregister could be in
    progress without changing the media devnode status to unregistered.
    
    process 1                               process 2
    fd = open(/dev/media0)
    media_devnode_is_registered()
            (returns true here)
    
                                            media_device_unregister()
                                                    (unregister is in progress
                                                    and devnode isn't
                                                    unregistered yet)
                                            ...
    ioctl(fd, ...)
    __media_ioctl()
    media_devnode_is_registered()
            (returns true here)
                                            ...
                                            media_devnode_unregister()
                                            ...
                                            (driver releases the media device
                                            memory)
    
    media_device_ioctl()
            (By this point
            devnode->media_dev does not
            point to allocated memory.
            use-after free in in mutex_lock_nested)
    
    BUG: KASAN: use-after-free in mutex_lock_nested+0x79c/0x800 at addr
    ffff8801ebe914f0
    
    Fix it by clearing register bit when unregister starts to avoid the race.
    
    process 1                               process 2
    fd = open(/dev/media0)
    media_devnode_is_registered()
            (could return true here)
    
                                            media_device_unregister()
                                                    (clear the register bit,
                                                     then start unregister.)
                                            ...
    ioctl(fd, ...)
    __media_ioctl()
    media_devnode_is_registered()
            (return false here, ioctl
             returns I/O error, and
             will not access media
             device memory)
                                            ...
                                            media_devnode_unregister()
                                            ...
                                            (driver releases the media device
                                             memory)
    
    Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
    Suggested-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Reported-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Tested-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    [bwh: Backported to 3.16: adjut filename, context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit f7b29039bda2db014c71d82aeb50da70ca09efe3
Author: Shuah Khan <shuah@kernel.org>
Date:   Wed May 4 16:48:28 2016 -0300

    media: fix use-after-free in cdev_put() when app exits after driver unbind
    
    commit 5b28dde51d0ccc54cee70756e1800d70bed7114a upstream.
    
    When driver unbinds while media_ioctl is in progress, cdev_put() fails with
    when app exits after driver unbinds.
    
    Add devnode struct device kobj as the cdev parent kobject. cdev_add() gets
    a reference to it and releases it in cdev_del() ensuring that the devnode
    is not deallocated as long as the application has the device file open.
    
    media_devnode_register() initializes the struct device kobj before calling
    cdev_add(). media_devnode_unregister() does cdev_del() and then deletes the
    device. devnode is released when the last reference to the struct device is
    gone.
    
    This problem is found on uvcvideo, em28xx, and au0828 drivers and fix has
    been tested on all three.
    
    kernel: [  193.599736] BUG: KASAN: use-after-free in cdev_put+0x4e/0x50
    kernel: [  193.599745] Read of size 8 by task media_device_te/1851
    kernel: [  193.599792] INFO: Allocated in __media_device_register+0x54
    kernel: [  193.599951] INFO: Freed in media_devnode_release+0xa4/0xc0
    
    kernel: [  193.601083] Call Trace:
    kernel: [  193.601093]  [<ffffffff81aecac3>] dump_stack+0x67/0x94
    kernel: [  193.601102]  [<ffffffff815359b2>] print_trailer+0x112/0x1a0
    kernel: [  193.601111]  [<ffffffff8153b5e4>] object_err+0x34/0x40
    kernel: [  193.601119]  [<ffffffff8153d9d4>] kasan_report_error+0x224/0x530
    kernel: [  193.601128]  [<ffffffff814a2c3d>] ? kzfree+0x2d/0x40
    kernel: [  193.601137]  [<ffffffff81539d72>] ? kfree+0x1d2/0x1f0
    kernel: [  193.601154]  [<ffffffff8157ca7e>] ? cdev_put+0x4e/0x50
    kernel: [  193.601162]  [<ffffffff8157ca7e>] cdev_put+0x4e/0x50
    kernel: [  193.601170]  [<ffffffff815767eb>] __fput+0x52b/0x6c0
    kernel: [  193.601179]  [<ffffffff8117743a>] ? switch_task_namespaces+0x2a
    kernel: [  193.601188]  [<ffffffff815769ee>] ____fput+0xe/0x10
    kernel: [  193.601196]  [<ffffffff81170023>] task_work_run+0x133/0x1f0
    kernel: [  193.601204]  [<ffffffff8117746e>] ? switch_task_namespaces+0x5e
    kernel: [  193.601213]  [<ffffffff8111b50c>] do_exit+0x72c/0x2c20
    kernel: [  193.601224]  [<ffffffff8111ade0>] ? release_task+0x1250/0x1250
    -
    -
    -
    kernel: [  193.601360]  [<ffffffff81003587>] ? exit_to_usermode_loop+0xe7
    kernel: [  193.601368]  [<ffffffff810035c0>] exit_to_usermode_loop+0x120
    kernel: [  193.601376]  [<ffffffff810061da>] syscall_return_slowpath+0x16a
    kernel: [  193.601386]  [<ffffffff82848b33>] entry_SYSCALL_64_fastpath+0xa6
    
    Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
    Tested-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a682f7a2f662e4e997a94c2e130ae42cd16b1da3
Author: Mauro Carvalho Chehab <mchehab@kernel.org>
Date:   Wed Apr 27 19:28:26 2016 -0300

    media-device: dynamically allocate struct media_devnode
    
    commit a087ce704b802becbb4b0f2a20f2cb3f6911802e upstream.
    
    struct media_devnode is currently embedded at struct media_device.
    
    While this works fine during normal usage, it leads to a race
    condition during devnode unregister. the problem is that drivers
    assume that, after calling media_device_unregister(), the struct
    that contains media_device can be freed. This is not true, as it
    can't be freed until userspace closes all opened /dev/media devnodes.
    
    In other words, if the media devnode is still open, and media_device
    gets freed, any call to an ioctl will make the core to try to access
    struct media_device, with will cause an use-after-free and even GPF.
    
    Fix this by dynamically allocating the struct media_devnode and only
    freeing it when it is safe.
    
    Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    [bwh: Backported to 3.16:
     - Drop change in au0828
     - Include <linux/slab.h> in media-device.c
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit c49a8aea912ca8b7cb5a2c2e3c0ae3674948533c
Author: Mauro Carvalho Chehab <mchehab@kernel.org>
Date:   Wed Mar 23 11:22:57 2016 -0300

    media-devnode: fix namespace mess
    
    commit 163f1e93e995048b894c5fc86a6034d16beed740 upstream.
    
    Along all media controller code, "mdev" is used to represent
    a pointer to struct media_device, and "devnode" for a pointer
    to struct media_devnode.
    
    However, inside media-devnode.[ch], "mdev" is used to represent
    a pointer to struct media_devnode.
    
    This is very confusing and may lead to development errors.
    
    So, let's change all occurrences at media-devnode.[ch] to
    also use "devnode" for such pointers.
    
    This patch doesn't make any functional changes.
    
    Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    [bwh: Backported to 3.16: adjust filename, context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7822acac3a2ca56bf519a9ac4e2d381454dc3b62
Author: Max Kellermann <max@duempel.org>
Date:   Mon Mar 21 04:33:12 2016 -0700

    media-devnode: add missing mutex lock in error handler
    
    commit 88336e174645948da269e1812f138f727cd2896b upstream.
    
    We should protect the device unregister patch too, at the error
    condition.
    
    Signed-off-by: Max Kellermann <max@duempel.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d4f640d3c8e585f0accf523515daaa303108a951
Author: Max Kellermann <max@duempel.org>
Date:   Mon Mar 21 10:30:28 2016 -0300

    drivers/media/media-devnode: clear private_data before put_device()
    
    commit bf244f665d76d20312c80524689b32a752888838 upstream.
    
    Callbacks invoked from put_device() may free the struct media_devnode
    pointer, so any cleanup needs to be done before put_device().
    
    Signed-off-by: Max Kellermann <max@duempel.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit f533f163275873aa1f0b247db0fdc5cd452c5fa2
Author: Shuah Khan <shuah@kernel.org>
Date:   Wed Jan 27 21:49:33 2016 -0200

    media: Fix media_open() to clear filp->private_data in error leg
    
    commit d40ec6fdb0b03b7be4c7923a3da0e46bf943740a upstream.
    
    Fix media_open() to clear filp->private_data when file open
    fails.
    
    Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
    Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2b9fba4061be83f88a3c3f98a201c7a4a0c5fbd7
Author: Mauro Carvalho Chehab <mchehab@kernel.org>
Date:   Wed Sep 3 15:18:27 2014 -0300

    media-devnode: just return 0 instead of using a var
    
    commit 8b37c6455fc8f43e0e95db2847284e618db6a4f8 upstream.
    
    Instead of allocating a var to store 0 and just return it,
    change the code to return 0 directly.
    
    Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit c6bea5a0977245830ef9e45a06baedcbd0e30666
Author: Vladis Dronov <vdronov@redhat.com>
Date:   Mon Jan 13 14:00:09 2020 +0100

    ptp: free ptp device pin descriptors properly
    
    commit 75718584cb3c64e6269109d4d54f888ac5a5fd15 upstream.
    
    There is a bug in ptp_clock_unregister(), where ptp_cleanup_pin_groups()
    first frees ptp->pin_{,dev_}attr, but then posix_clock_unregister() needs
    them to destroy a related sysfs device.
    
    These functions can not be just swapped, as posix_clock_unregister() frees
    ptp which is needed in the ptp_cleanup_pin_groups(). Fix this by calling
    ptp_cleanup_pin_groups() in ptp_clock_release(), right before ptp is freed.
    
    This makes this patch fix an UAF bug in a patch which fixes an UAF bug.
    
    Reported-by: Antti Laakso <antti.laakso@intel.com>
    Fixes: a33121e5487b ("ptp: fix the race between the release of ptp_clock and cdev")
    Link: https://lore.kernel.org/netdev/3d2bd09735dbdaf003585ca376b7c1e5b69a19bd.camel@intel.com/
    Signed-off-by: Vladis Dronov <vdronov@redhat.com>
    Acked-by: Richard Cochran <richardcochran@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5230ef61882d2d14deb846eb6b48370694816e4c
Author: Vladis Dronov <vdronov@redhat.com>
Date:   Fri Dec 27 03:26:27 2019 +0100

    ptp: fix the race between the release of ptp_clock and cdev
    
    commit a33121e5487b424339636b25c35d3a180eaa5f5e upstream.
    
    In a case when a ptp chardev (like /dev/ptp0) is open but an underlying
    device is removed, closing this file leads to a race. This reproduces
    easily in a kvm virtual machine:
    
    ts# cat openptp0.c
    int main() { ... fp = fopen("/dev/ptp0", "r"); ... sleep(10); }
    ts# uname -r
    5.5.0-rc3-46cf053e
    ts# cat /proc/cmdline
    ... slub_debug=FZP
    ts# modprobe ptp_kvm
    ts# ./openptp0 &
    [1] 670
    opened /dev/ptp0, sleeping 10s...
    ts# rmmod ptp_kvm
    ts# ls /dev/ptp*
    ls: cannot access '/dev/ptp*': No such file or directory
    ts# ...woken up
    [   48.010809] general protection fault: 0000 [#1] SMP
    [   48.012502] CPU: 6 PID: 658 Comm: openptp0 Not tainted 5.5.0-rc3-46cf053e #25
    [   48.014624] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), ...
    [   48.016270] RIP: 0010:module_put.part.0+0x7/0x80
    [   48.017939] RSP: 0018:ffffb3850073be00 EFLAGS: 00010202
    [   48.018339] RAX: 000000006b6b6b6b RBX: 6b6b6b6b6b6b6b6b RCX: ffff89a476c00ad0
    [   48.018936] RDX: fffff65a08d3ea08 RSI: 0000000000000247 RDI: 6b6b6b6b6b6b6b6b
    [   48.019470] ...                                              ^^^ a slub poison
    [   48.023854] Call Trace:
    [   48.024050]  __fput+0x21f/0x240
    [   48.024288]  task_work_run+0x79/0x90
    [   48.024555]  do_exit+0x2af/0xab0
    [   48.024799]  ? vfs_write+0x16a/0x190
    [   48.025082]  do_group_exit+0x35/0x90
    [   48.025387]  __x64_sys_exit_group+0xf/0x10
    [   48.025737]  do_syscall_64+0x3d/0x130
    [   48.026056]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [   48.026479] RIP: 0033:0x7f53b12082f6
    [   48.026792] ...
    [   48.030945] Modules linked in: ptp i6300esb watchdog [last unloaded: ptp_kvm]
    [   48.045001] Fixing recursive fault but reboot is needed!
    
    This happens in:
    
    static void __fput(struct file *file)
    {   ...
        if (file->f_op->release)
            file->f_op->release(inode, file); <<< cdev is kfree'd here
        if (unlikely(S_ISCHR(inode->i_mode) && inode->i_cdev != NULL &&
                 !(mode & FMODE_PATH))) {
            cdev_put(inode->i_cdev); <<< cdev fields are accessed here
    
    Namely:
    
    __fput()
      posix_clock_release()
        kref_put(&clk->kref, delete_clock) <<< the last reference
          delete_clock()
            delete_ptp_clock()
              kfree(ptp) <<< cdev is embedded in ptp
      cdev_put
        module_put(p->owner) <<< *p is kfree'd, bang!
    
    Here cdev is embedded in posix_clock which is embedded in ptp_clock.
    The race happens because ptp_clock's lifetime is controlled by two
    refcounts: kref and cdev.kobj in posix_clock. This is wrong.
    
    Make ptp_clock's sysfs device a parent of cdev with cdev_device_add()
    created especially for such cases. This way the parent device with its
    ptp_clock is not released until all references to the cdev are released.
    This adds a requirement that an initialized but not exposed struct
    device should be provided to posix_clock_register() by a caller instead
    of a simple dev_t.
    
    This approach was adopted from the commit 72139dfa2464 ("watchdog: Fix
    the race between the release of watchdog_core_data and cdev"). See
    details of the implementation in the commit 233ed09d7fda ("chardev: add
    helper function to register char devs with a struct device").
    
    Link: https://lore.kernel.org/linux-fsdevel/20191125125342.6189-1-vdronov@redhat.com/T/#u
    Analyzed-by: Stephen Johnston <sjohnsto@redhat.com>
    Analyzed-by: Vern Lovejoy <vlovejoy@redhat.com>
    Signed-off-by: Vladis Dronov <vdronov@redhat.com>
    Acked-by: Richard Cochran <richardcochran@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 4561df92009d09162f75d9467416184db8d62ada
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Fri Nov 23 09:54:55 2018 +0800

    ptp: Fix pass zero to ERR_PTR() in ptp_clock_register
    
    commit aea0a897af9e44c258e8ab9296fad417f1bc063a upstream.
    
    Fix smatch warning:
    
    drivers/ptp/ptp_clock.c:298 ptp_clock_register() warn:
     passing zero to 'ERR_PTR'
    
    'err' should be set while device_create_with_groups and
    pps_register_source fails
    
    Fixes: 85a66e550195 ("ptp: create "pins" together with the rest of attributes")
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Acked-by: Richard Cochran <richardcochran@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit f78b54e7d83c7879f9a6e49e6724019ca34177cc
Author: Logan Gunthorpe <logang@deltatee.com>
Date:   Fri Mar 17 12:48:08 2017 -0600

    chardev: add helper function to register char devs with a struct device
    
    commit 233ed09d7fdacf592ee91e6c97ce5f4364fbe7c0 upstream.
    
    Credit for this patch goes is shared with Dan Williams [1]. I've
    taken things one step further to make the helper function more
    useful and clean up calling code.
    
    There's a common pattern in the kernel whereby a struct cdev is placed
    in a structure along side a struct device which manages the life-cycle
    of both. In the naive approach, the reference counting is broken and
    the struct device can free everything before the chardev code
    is entirely released.
    
    Many developers have solved this problem by linking the internal kobjs
    in this fashion:
    
    cdev.kobj.parent = &parent_dev.kobj;
    
    The cdev code explicitly gets and puts a reference to it's kobj parent.
    So this seems like it was intended to be used this way. Dmitrty Torokhov
    first put this in place in 2012 with this commit:
    
    2f0157f char_dev: pin parent kobject
    
    and the first instance of the fix was then done in the input subsystem
    in the following commit:
    
    4a215aa Input: fix use-after-free introduced with dynamic minor changes
    
    Subsequently over the years, however, this issue seems to have tripped
    up multiple developers independently. For example, see these commits:
    
    0d5b7da iio: Prevent race between IIO chardev opening and IIO device
    (by Lars-Peter Clausen in 2013)
    
    ba0ef85 tpm: Fix initialization of the cdev
    (by Jason Gunthorpe in 2015)
    
    5b28dde [media] media: fix use-after-free in cdev_put() when app exits
    after driver unbind
    (by Shauh Khan in 2016)
    
    This technique is similarly done in at least 15 places within the kernel
    and probably should have been done so in another, at least, 5 places.
    The kobj line also looks very suspect in that one would not expect
    drivers to have to mess with kobject internals in this way.
    Even highly experienced kernel developers can be surprised by this
    code, as seen in [2].
    
    To help alleviate this situation, and hopefully prevent future
    wasted effort on this problem, this patch introduces a helper function
    to register a char device along with its parent struct device.
    This creates a more regular API for tying a char device to its parent
    without the developer having to set members in the underlying kobject.
    
    This patch introduce cdev_device_add and cdev_device_del which
    replaces a common pattern including setting the kobj parent, calling
    cdev_add and then calling device_add. It also introduces cdev_set_parent
    for the few cases that set the kobject parent without using device_add.
    
    [1] https://lkml.org/lkml/2017/2/13/700
    [2] https://lkml.org/lkml/2017/2/10/370
    
    Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Reviewed-by: Hans Verkuil <hans.verkuil@cisco.com>
    Reviewed-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 890346cfd82bc28ad29c56c715e89eb835995997
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Tue Feb 14 10:23:34 2017 -0800

    ptp: create "pins" together with the rest of attributes
    
    commit 85a66e55019583da1e0f18706b7a8281c9f6de5b upstream.
    
    Let's switch to using device_create_with_groups(), which will allow us to
    create "pins" attribute group together with the rest of ptp device
    attributes, and before userspace gets notified about ptp device creation.
    
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.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 6ad6729bb3d9149e7e14b2181adebfc01e5d668d
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Tue Feb 14 10:23:33 2017 -0800

    ptp: use is_visible method to hide unused attributes
    
    commit af59e717d5ff9c8dbf9bcc581c0dfb3b2a9c9030 upstream.
    
    Instead of creating selected attributes after the device is created (and
    after userspace potentially seen uevent), lets use attribute group
    is_visible() method to control which attributes are shown. This will allow
    us to create all attributes (except "pins" group, which will be taken care
    of later) before userspace gets notified about new ptp class device.
    
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 28b0c45109d2f97b47067b3a2b79b0742aa8ff3e
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Tue Feb 14 10:23:31 2017 -0800

    ptp: do not explicitly set drvdata in ptp_clock_register()
    
    commit 882f312dc0751c973db26478f07f082c584d16aa upstream.
    
    We do not need explicitly call dev_set_drvdata(), as it is done for us by
    device_create().
    
    Acked-by: Richard Cochran <richardcochran@gmail.com>
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 9e236e2465ff5858bed537b94b15134e3ba55e75
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 3 17:35:11 2020 +0100

    media: xirlink_cit: add missing descriptor sanity checks
    
    commit a246b4d547708f33ff4d4b9a7a5dbac741dc89d8 upstream.
    
    Make sure to check that we have two alternate settings and at least one
    endpoint before accessing the second altsetting structure and
    dereferencing the endpoint arrays.
    
    This specifically avoids dereferencing NULL-pointers or corrupting
    memory when a device does not have the expected descriptors.
    
    Note that the sanity check in cit_get_packet_size() is not redundant as
    the driver is mixing looking up altsettings by index and by number,
    which may not coincide.
    
    Fixes: 659fefa0eb17 ("V4L/DVB: gspca_xirlink_cit: Add support for camera with a bcd version of 0.01")
    Fixes: 59f8b0bf3c12 ("V4L/DVB: gspca_xirlink_cit: support bandwidth changing for devices with 1 alt setting")
    Cc: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 98d33c0103b16e64a6a4788cf81e22baf229f48e
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 3 17:35:10 2020 +0100

    media: stv06xx: add missing descriptor sanity checks
    
    commit 485b06aadb933190f4bc44e006076bc27a23f205 upstream.
    
    Make sure to check that we have two alternate settings and at least one
    endpoint before accessing the second altsetting structure and
    dereferencing the endpoint arrays.
    
    This specifically avoids dereferencing NULL-pointers or corrupting
    memory when a device does not have the expected descriptors.
    
    Note that the sanity checks in stv06xx_start() and pb0100_start() are
    not redundant as the driver is mixing looking up altsettings by index
    and by number, which may not coincide.
    
    Fixes: 8668d504d72c ("V4L/DVB (12082): gspca_stv06xx: Add support for st6422 bridge and sensor")
    Fixes: c0b33bdc5b8d ("[media] gspca-stv06xx: support bandwidth changing")
    Cc: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 39a4c51860e9695369b640962be4eb6984175384
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 3 17:35:09 2020 +0100

    media: ov519: add missing endpoint sanity checks
    
    commit 998912346c0da53a6dbb71fab3a138586b596b30 upstream.
    
    Make sure to check that we have at least one endpoint before accessing
    the endpoint array to avoid dereferencing a NULL-pointer on stream
    start.
    
    Note that these sanity checks are not redundant as the driver is mixing
    looking up altsettings by index and by number, which need not coincide.
    
    Fixes: 1876bb923c98 ("V4L/DVB (12079): gspca_ov519: add support for the ov511 bridge")
    Fixes: b282d87332f5 ("V4L/DVB (12080): gspca_ov519: Fix ov518+ with OV7620AE (Trust spacecam 320)")
    Cc: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7ca9aeb9a22b50841c401164703c5b0a4a510aff
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Wed Apr 1 21:10:58 2020 -0700

    mm: mempolicy: require at least one nodeid for MPOL_PREFERRED
    
    commit aa9f7d5172fac9bf1f09e678c35e287a40a7b7dd upstream.
    
    Using an empty (malformed) nodelist that is not caught during mount option
    parsing leads to a stack-out-of-bounds access.
    
    The option string that was used was: "mpol=prefer:,".  However,
    MPOL_PREFERRED requires a single node number, which is not being provided
    here.
    
    Add a check that 'nodes' is not empty after parsing for MPOL_PREFERRED's
    nodeid.
    
    Fixes: 095f1fc4ebf3 ("mempolicy: rework shmem mpol parsing and display")
    Reported-by: Entropy Moe <3ntr0py1337@gmail.com>
    Reported-by: syzbot+b055b1a6b2b958707a21@syzkaller.appspotmail.com
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Tested-by: syzbot+b055b1a6b2b958707a21@syzkaller.appspotmail.com
    Cc: Lee Schermerhorn <lee.schermerhorn@hp.com>
    Link: http://lkml.kernel.org/r/89526377-7eb6-b662-e1d8-4430928abde9@infradead.org
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e4d98e5299b19e1caad03f0b38fd41b046d0de56
Author: Eugenio Pérez <eperezma@redhat.com>
Date:   Fri Feb 21 12:06:56 2020 +0100

    vhost: Check docket sk_family instead of call getname
    
    commit 42d84c8490f9f0931786f1623191fcab397c3d64 upstream.
    
    Doing so, we save one call to get data we already have in the struct.
    
    Also, since there is no guarantee that getname use sockaddr_ll
    parameter beyond its size, we add a little bit of security here.
    It should do not do beyond MAX_ADDR_LEN, but syzbot found that
    ax25_getname writes more (72 bytes, the size of full_sockaddr_ax25,
    versus 20 + 32 bytes of sockaddr_ll + MAX_ADDR_LEN in syzbot repro).
    
    Fixes: 3a4d5c94e9593 ("vhost_net: a kernel-level virtio server")
    Reported-by: syzbot+f2a62d07a5198c819c7b@syzkaller.appspotmail.com
    Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    [bwh: Backported to 3.16: Also delete "uaddr_len" variable]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2f9ac30a54dc0181ddac3705cdcf4775d863c530
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Fri Feb 21 12:43:35 2020 -0800

    floppy: check FDC index for errors before assigning it
    
    commit 2e90ca68b0d2f5548804f22f0dd61145516171e3 upstream.
    
    Jordy Zomer reported a KASAN out-of-bounds read in the floppy driver in
    wait_til_ready().
    
    Which on the face of it can't happen, since as Willy Tarreau points out,
    the function does no particular memory access.  Except through the FDCS
    macro, which just indexes a static allocation through teh current fdc,
    which is always checked against N_FDC.
    
    Except the checking happens after we've already assigned the value.
    
    The floppy driver is a disgrace (a lot of it going back to my original
    horrd "design"), and has no real maintainer.  Nobody has the hardware,
    and nobody really cares.  But it still gets used in virtual environment
    because it's one of those things that everybody supports.
    
    The whole thing should be re-written, or at least parts of it should be
    seriously cleaned up.  The 'current fdc' index, which is used by the
    FDCS macro, and which is often shadowed by a local 'fdc' variable, is a
    prime example of how not to write code.
    
    But because nobody has the hardware or the motivation, let's just fix up
    the immediate problem with a nasty band-aid: test the fdc index before
    actually assigning it to the static 'fdc' variable.
    
    Reported-by: Jordy Zomer <jordy@simplyhacker.com>
    Cc: Willy Tarreau <w@1wt.eu>
    Cc: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 54c522782fd11a720f959ee9cb5a15bb9580343d
Author: Jiri Slaby <jslaby@suse.cz>
Date:   Fri Feb 28 12:54:06 2020 +0100

    vt: selection, push sel_lock up
    
    commit e8c75a30a23c6ba63f4ef6895cbf41fd42f21aa2 upstream.
    
    sel_lock cannot nest in the console lock. Thanks to syzkaller, the
    kernel states firmly:
    
    > WARNING: possible circular locking dependency detected
    > 5.6.0-rc3-syzkaller #0 Not tainted
    > ------------------------------------------------------
    > syz-executor.4/20336 is trying to acquire lock:
    > ffff8880a2e952a0 (&tty->termios_rwsem){++++}, at: tty_unthrottle+0x22/0x100 drivers/tty/tty_ioctl.c:136
    >
    > but task is already holding lock:
    > ffffffff89462e70 (sel_lock){+.+.}, at: paste_selection+0x118/0x470 drivers/tty/vt/selection.c:374
    >
    > which lock already depends on the new lock.
    >
    > the existing dependency chain (in reverse order) is:
    >
    > -> #2 (sel_lock){+.+.}:
    >        mutex_lock_nested+0x1b/0x30 kernel/locking/mutex.c:1118
    >        set_selection_kernel+0x3b8/0x18a0 drivers/tty/vt/selection.c:217
    >        set_selection_user+0x63/0x80 drivers/tty/vt/selection.c:181
    >        tioclinux+0x103/0x530 drivers/tty/vt/vt.c:3050
    >        vt_ioctl+0x3f1/0x3a30 drivers/tty/vt/vt_ioctl.c:364
    
    This is ioctl(TIOCL_SETSEL).
    Locks held on the path: console_lock -> sel_lock
    
    > -> #1 (console_lock){+.+.}:
    >        console_lock+0x46/0x70 kernel/printk/printk.c:2289
    >        con_flush_chars+0x50/0x650 drivers/tty/vt/vt.c:3223
    >        n_tty_write+0xeae/0x1200 drivers/tty/n_tty.c:2350
    >        do_tty_write drivers/tty/tty_io.c:962 [inline]
    >        tty_write+0x5a1/0x950 drivers/tty/tty_io.c:1046
    
    This is write().
    Locks held on the path: termios_rwsem -> console_lock
    
    > -> #0 (&tty->termios_rwsem){++++}:
    >        down_write+0x57/0x140 kernel/locking/rwsem.c:1534
    >        tty_unthrottle+0x22/0x100 drivers/tty/tty_ioctl.c:136
    >        mkiss_receive_buf+0x12aa/0x1340 drivers/net/hamradio/mkiss.c:902
    >        tty_ldisc_receive_buf+0x12f/0x170 drivers/tty/tty_buffer.c:465
    >        paste_selection+0x346/0x470 drivers/tty/vt/selection.c:389
    >        tioclinux+0x121/0x530 drivers/tty/vt/vt.c:3055
    >        vt_ioctl+0x3f1/0x3a30 drivers/tty/vt/vt_ioctl.c:364
    
    This is ioctl(TIOCL_PASTESEL).
    Locks held on the path: sel_lock -> termios_rwsem
    
    > other info that might help us debug this:
    >
    > Chain exists of:
    >   &tty->termios_rwsem --> console_lock --> sel_lock
    
    Clearly. From the above, we have:
     console_lock -> sel_lock
     sel_lock -> termios_rwsem
     termios_rwsem -> console_lock
    
    Fix this by reversing the console_lock -> sel_lock dependency in
    ioctl(TIOCL_SETSEL). First, lock sel_lock, then console_lock.
    
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Reported-by: syzbot+26183d9746e62da329b8@syzkaller.appspotmail.com
    Fixes: 07e6124a1a46 ("vt: selection, close sel_buffer race")
    Link: https://lore.kernel.org/r/20200228115406.5735-2-jslaby@suse.cz
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit f443603c73b85db566373875ca8890ef0910f083
Author: Jiri Slaby <jslaby@suse.cz>
Date:   Fri Feb 28 12:54:05 2020 +0100

    vt: selection, push console lock down
    
    commit 4b70dd57a15d2f4685ac6e38056bad93e81e982f upstream.
    
    We need to nest the console lock in sel_lock, so we have to push it down
    a bit. Fortunately, the callers of set_selection_* just lock the console
    lock around the function call. So moving it down is easy.
    
    In the next patch, we switch the order.
    
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Fixes: 07e6124a1a46 ("vt: selection, close sel_buffer race")
    Link: https://lore.kernel.org/r/20200228115406.5735-1-jslaby@suse.cz
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a93c3b40fc3d2264b1b11c469319c7cbefb80c46
Author: Jiri Slaby <jslaby@suse.cz>
Date:   Mon Feb 10 09:11:31 2020 +0100

    vt: selection, close sel_buffer race
    
    commit 07e6124a1a46b4b5a9b3cacc0c306b50da87abf5 upstream.
    
    syzkaller reported this UAF:
    BUG: KASAN: use-after-free in n_tty_receive_buf_common+0x2481/0x2940 drivers/tty/n_tty.c:1741
    Read of size 1 at addr ffff8880089e40e9 by task syz-executor.1/13184
    
    CPU: 0 PID: 13184 Comm: syz-executor.1 Not tainted 5.4.7 #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    Call Trace:
    ...
     kasan_report+0xe/0x20 mm/kasan/common.c:634
     n_tty_receive_buf_common+0x2481/0x2940 drivers/tty/n_tty.c:1741
     tty_ldisc_receive_buf+0xac/0x190 drivers/tty/tty_buffer.c:461
     paste_selection+0x297/0x400 drivers/tty/vt/selection.c:372
     tioclinux+0x20d/0x4e0 drivers/tty/vt/vt.c:3044
     vt_ioctl+0x1bcf/0x28d0 drivers/tty/vt/vt_ioctl.c:364
     tty_ioctl+0x525/0x15a0 drivers/tty/tty_io.c:2657
     vfs_ioctl fs/ioctl.c:47 [inline]
    
    It is due to a race between parallel paste_selection (TIOCL_PASTESEL)
    and set_selection_user (TIOCL_SETSEL) invocations. One uses sel_buffer,
    while the other frees it and reallocates a new one for another
    selection. Add a mutex to close this race.
    
    The mutex takes care properly of sel_buffer and sel_buffer_lth only. The
    other selection global variables (like sel_start, sel_end, and sel_cons)
    are protected only in set_selection_user. The other functions need quite
    some more work to close the races of the variables there. This is going
    to happen later.
    
    This likely fixes (I am unsure as there is no reproducer provided) bug
    206361 too. It was marked as CVE-2020-8648.
    
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Reported-by: syzbot+59997e8d5cbdc486e6f6@syzkaller.appspotmail.com
    References: https://bugzilla.kernel.org/show_bug.cgi?id=206361
    Link: https://lore.kernel.org/r/20200210081131.23572-2-jslaby@suse.cz
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2b553bde7725bdd5faf19088eee4031ccdc256cd
Author: Jiri Slaby <jslaby@suse.cz>
Date:   Mon Feb 10 09:11:30 2020 +0100

    vt: selection, handle pending signals in paste_selection
    
    commit 687bff0cd08f790d540cfb7b2349f0d876cdddec upstream.
    
    When pasting a selection to a vt, the task is set as INTERRUPTIBLE while
    waiting for a tty to unthrottle. But signals are not handled at all.
    Normally, this is not a problem as tty_ldisc_receive_buf receives all
    the goods and a user has no reason to interrupt the task.
    
    There are two scenarios where this matters:
    1) when the tty is throttled and a signal is sent to the process, it
       spins on a CPU until the tty is unthrottled. schedule() does not
       really echedule, but returns immediately, of course.
    2) when the sel_buffer becomes invalid, KASAN prevents any reads from it
       and the loop simply does not proceed and spins forever (causing the
       tty to throttle, but the code never sleeps, the same as above). This
       sometimes happens as there is a race in the sel_buffer handling code.
    
    So add signal handling to this ioctl (TIOCL_PASTESEL) and return -EINTR
    in case a signal is pending.
    
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Link: https://lore.kernel.org/r/20200210081131.23572-1-jslaby@suse.cz
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16:
     - No need to include <linux/sched/signal.h>
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a0c13fc21e90c5d811cc6b546841ad4ee9a56f98
Author: Peter Hurley <peter@hurleysoftware.com>
Date:   Sun Jul 12 20:47:35 2015 -0400

    tty: vt: Fix !TASK_RUNNING diagnostic warning from paste_selection()
    
    commit 61e86cc90af49cecef9c54ccea1f572fbcb695ac upstream.
    
    Pasting text with gpm on a VC produced warning [1]. Reset task state
    to TASK_RUNNING in the paste_selection() loop, if the loop did not
    sleep.
    
    [1]
    WARNING: CPU: 6 PID: 1960 at /home/peter/src/kernels/mainline/kernel/sched/core.c:7286 __might_sleep+0x7f/0x90()
    do not call blocking ops when !TASK_RUNNING; state=1 set at [<ffffffff8151805e>] paste_selection+0x9e/0x1a0
    Modules linked in: btrfs xor raid6_pq ufs qnx4 hfsplus hfs minix ntfs msdos jfs xfs libcrc32c .....
    CPU: 6 PID: 1960 Comm: gpm Not tainted 4.1.0-rc7+tty-xeon+debug #rc7+tty
    Hardware name: Dell Inc. Precision WorkStation T5400  /0RW203, BIOS A11 04/30/2012
     ffffffff81c9c0a0 ffff8802b0fd3ac8 ffffffff8185778a 0000000000000001
     ffff8802b0fd3b18 ffff8802b0fd3b08 ffffffff8108039a ffffffff82ae8510
     ffffffff81c9ce00 0000000000000015 0000000000000000 0000000000000000
    Call Trace:
     [<ffffffff8185778a>] dump_stack+0x4f/0x7b
     [<ffffffff8108039a>] warn_slowpath_common+0x8a/0xc0
     [<ffffffff81080416>] warn_slowpath_fmt+0x46/0x50
     [<ffffffff810ddced>] ? __lock_acquire+0xe2d/0x13a0
     [<ffffffff8151805e>] ? paste_selection+0x9e/0x1a0
     [<ffffffff8151805e>] ? paste_selection+0x9e/0x1a0
     [<ffffffff810ad4ff>] __might_sleep+0x7f/0x90
     [<ffffffff8185f76a>] down_read+0x2a/0xa0
     [<ffffffff810bb1d8>] ? sched_clock_cpu+0xb8/0xe0
     [<ffffffff8150d1dc>] n_tty_receive_buf_common+0x4c/0xba0
     [<ffffffff810dc875>] ? mark_held_locks+0x75/0xa0
     [<ffffffff81861c95>] ? _raw_spin_unlock_irqrestore+0x65/0x80
     [<ffffffff810b49a1>] ? get_parent_ip+0x11/0x50
     [<ffffffff8150dd44>] n_tty_receive_buf2+0x14/0x20
     [<ffffffff81518117>] paste_selection+0x157/0x1a0
     [<ffffffff810b77b0>] ? wake_up_state+0x20/0x20
     [<ffffffff815203f8>] tioclinux+0xb8/0x2c0
     [<ffffffff81515bfe>] vt_ioctl+0xaee/0x11a0
     [<ffffffff810baf75>] ? sched_clock_local+0x25/0x90
     [<ffffffff810bbe11>] ? vtime_account_user+0x91/0xa0
     [<ffffffff8150810c>] tty_ioctl+0x20c/0xe20
     [<ffffffff810bbe11>] ? vtime_account_user+0x91/0xa0
     [<ffffffff810b49a1>] ? get_parent_ip+0x11/0x50
     [<ffffffff810b4a69>] ? preempt_count_sub+0x49/0x50
     [<ffffffff811ab71c>] ? context_tracking_exit+0x5c/0x290
     [<ffffffff811ab71c>] ? context_tracking_exit+0x5c/0x290
     [<ffffffff81248b98>] do_vfs_ioctl+0x318/0x570
     [<ffffffff810dca8d>] ? trace_hardirqs_on+0xd/0x10
     [<ffffffff810dc9b5>] ? trace_hardirqs_on_caller+0x115/0x1e0
     [<ffffffff81254acc>] ? __fget_light+0x6c/0xa0
     [<ffffffff81248e71>] SyS_ioctl+0x81/0xa0
     [<ffffffff81862832>] system_call_fastpath+0x16/0x7a
    
    Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit bca2e2e83484ff63ca82c9c2c905d4e580f1a35a
Author: Zhang Xiaoxu <zhangxiaoxu5@huawei.com>
Date:   Wed Mar 4 10:24:29 2020 +0800

    vgacon: Fix a UAF in vgacon_invert_region
    
    commit 513dc792d6060d5ef572e43852683097a8420f56 upstream.
    
    When syzkaller tests, there is a UAF:
      BUG: KASan: use after free in vgacon_invert_region+0x9d/0x110 at addr
        ffff880000100000
      Read of size 2 by task syz-executor.1/16489
      page:ffffea0000004000 count:0 mapcount:-127 mapping:          (null)
      index:0x0
      page flags: 0xfffff00000000()
      page dumped because: kasan: bad access detected
      CPU: 1 PID: 16489 Comm: syz-executor.1 Not tainted
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
      rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2014
      Call Trace:
        [<ffffffffb119f309>] dump_stack+0x1e/0x20
        [<ffffffffb04af957>] kasan_report+0x577/0x950
        [<ffffffffb04ae652>] __asan_load2+0x62/0x80
        [<ffffffffb090f26d>] vgacon_invert_region+0x9d/0x110
        [<ffffffffb0a39d95>] invert_screen+0xe5/0x470
        [<ffffffffb0a21dcb>] set_selection+0x44b/0x12f0
        [<ffffffffb0a3bfae>] tioclinux+0xee/0x490
        [<ffffffffb0a1d114>] vt_ioctl+0xff4/0x2670
        [<ffffffffb0a0089a>] tty_ioctl+0x46a/0x1a10
        [<ffffffffb052db3d>] do_vfs_ioctl+0x5bd/0xc40
        [<ffffffffb052e2f2>] SyS_ioctl+0x132/0x170
        [<ffffffffb11c9b1b>] system_call_fastpath+0x22/0x27
        Memory state around the buggy address:
         ffff8800000fff00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00
         00 00
         ffff8800000fff80: 00 00 00 00 00 00 00 00 00 00 00 00 00
         00 00 00
        >ffff880000100000: ff ff ff ff ff ff ff ff ff ff ff ff ff
         ff ff ff
    
    It can be reproduce in the linux mainline by the program:
      #include <stdio.h>
      #include <stdlib.h>
      #include <unistd.h>
      #include <fcntl.h>
      #include <sys/types.h>
      #include <sys/stat.h>
      #include <sys/ioctl.h>
      #include <linux/vt.h>
    
      struct tiocl_selection {
        unsigned short xs;      /* X start */
        unsigned short ys;      /* Y start */
        unsigned short xe;      /* X end */
        unsigned short ye;      /* Y end */
        unsigned short sel_mode; /* selection mode */
      };
    
      #define TIOCL_SETSEL    2
      struct tiocl {
        unsigned char type;
        unsigned char pad;
        struct tiocl_selection sel;
      };
    
      int main()
      {
        int fd = 0;
        const char *dev = "/dev/char/4:1";
    
        struct vt_consize v = {0};
        struct tiocl tioc = {0};
    
        fd = open(dev, O_RDWR, 0);
    
        v.v_rows = 3346;
        ioctl(fd, VT_RESIZEX, &v);
    
        tioc.type = TIOCL_SETSEL;
        ioctl(fd, TIOCLINUX, &tioc);
    
        return 0;
      }
    
    When resize the screen, update the 'vc->vc_size_row' to the new_row_size,
    but when 'set_origin' in 'vgacon_set_origin', vgacon use 'vga_vram_base'
    for 'vc_origin' and 'vc_visible_origin', not 'vc_screenbuf'. It maybe
    smaller than 'vc_screenbuf'. When TIOCLINUX, use the new_row_size to calc
    the offset, it maybe larger than the vga_vram_size in vgacon driver, then
    bad access.
    Also, if set an larger screenbuf firstly, then set an more larger
    screenbuf, when copy old_origin to new_origin, a bad access may happen.
    
    So, If the screen size larger than vga_vram, resize screen should be
    failed. This alse fix CVE-2020-8649 and CVE-2020-8647.
    
    Linus pointed out that overflow checking seems absent. We're saved by
    the existing bounds checks in vc_do_resize() with rather strict
    limits:
    
            if (cols > VC_RESIZE_MAXCOL || lines > VC_RESIZE_MAXROW)
                    return -EINVAL;
    
    Fixes: 0aec4867dca14 ("[PATCH] SVGATextMode fix")
    Reference: CVE-2020-8647 and CVE-2020-8649
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Zhang Xiaoxu <zhangxiaoxu5@huawei.com>
    [danvet: augment commit message to point out overflow safety]
    Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200304022429.37738-1-zhangxiaoxu5@huawei.com
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5d7476c40cd352ec82aec26f6c6d8c413eb2b17b
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Tue Feb 4 15:26:29 2020 -0800

    KVM: nVMX: Don't emulate instructions in guest mode
    
    commit 07721feee46b4b248402133228235318199b05ec upstream.
    
    vmx_check_intercept is not yet fully implemented. To avoid emulating
    instructions disallowed by the L1 hypervisor, refuse to emulate
    instructions by default.
    
    [Made commit, added commit msg - Oliver]
    Signed-off-by: Oliver Upton <oupton@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    [bwh: Backported to 3.16: adjust filename, context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b9f3e457098ea76f2d69bfc369bae1fd0cf2a6e5
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Wed Dec 4 15:35:53 2019 +0100

    net: ipv6_stub: use ip6_dst_lookup_flow instead of ip6_dst_lookup
    
    commit 6c8991f41546c3c472503dff1ea9daaddf9331c2 upstream.
    
    ipv6_stub uses the ip6_dst_lookup function to allow other modules to
    perform IPv6 lookups. However, this function skips the XFRM layer
    entirely.
    
    All users of ipv6_stub->ip6_dst_lookup use ip_route_output_flow (via the
    ip_route_output_key and ip_route_output helpers) for their IPv4 lookups,
    which calls xfrm_lookup_route(). This patch fixes this inconsistent
    behavior by switching the stub to ip6_dst_lookup_flow, which also calls
    xfrm_lookup_route().
    
    This requires some changes in all the callers, as these two functions
    take different arguments and have different return types.
    
    Fixes: 5f81bd2e5d80 ("ipv6: export a stub for IPv6 symbols used by vxlan")
    Reported-by: Xiumei Mu <xmu@redhat.com>
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    [bwh: Backported to 3.16:
     - Only vxlan uses this operation
     - Neither ip6_dst_lookup() nor ip6_dst_lookup_flow() takes a struct net
       pointer argument here
     - Adjust filename, context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 85216b0a3fc5f3eb08e68750175f8507d5608e37
Author: Suren Baghdasaryan <surenb@google.com>
Date:   Mon Jan 27 15:56:16 2020 -0800

    staging: android: ashmem: Disallow ashmem memory from being remapped
    
    commit 6d67b0290b4b84c477e6a2fc6e005e174d3c7786 upstream.
    
    When ashmem file is mmapped, the resulting vma->vm_file points to the
    backing shmem file with the generic fops that do not check ashmem
    permissions like fops of ashmem do. If an mremap is done on the ashmem
    region, then the permission checks will be skipped. Fix that by disallowing
    mapping operation on the backing shmem file.
    
    Reported-by: Jann Horn <jannh@google.com>
    Signed-off-by: Suren Baghdasaryan <surenb@google.com>
    Signed-off-by: Todd Kjos <tkjos@google.com>
    Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    Link: https://lore.kernel.org/r/20200127235616.48920-1-tkjos@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 4af47d3cc875e43a523f6d3b3edef2ca785ccf27
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Fri Dec 13 14:56:16 2019 -0800

    Input: add safety guards to input_set_keycode()
    
    commit cb222aed03d798fc074be55e59d9a112338ee784 upstream.
    
    If we happen to have a garbage in input device's keycode table with values
    too big we'll end up doing clear_bit() with offset way outside of our
    bitmaps, damaging other objects within an input device or even outside of
    it. Let's add sanity checks to the returned old keycodes.
    
    Reported-by: syzbot+c769968809f9359b07aa@syzkaller.appspotmail.com
    Reported-by: syzbot+76f3a30e88d256644c78@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/r/20191207212757.GA245964@dtor-ws
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit fc0d59fe1d15f087d8c8fe3212b8176a0ea47aa9
Author: Cengiz Can <cengiz@kernel.wtf>
Date:   Wed Mar 4 13:58:19 2020 +0300

    blktrace: fix dereference after null check
    
    commit 153031a301bb07194e9c37466cfce8eacb977621 upstream.
    
    There was a recent change in blktrace.c that added a RCU protection to
    `q->blk_trace` in order to fix a use-after-free issue during access.
    
    However the change missed an edge case that can lead to dereferencing of
    `bt` pointer even when it's NULL:
    
    Coverity static analyzer marked this as a FORWARD_NULL issue with CID
    1460458.
    
    ```
    /kernel/trace/blktrace.c: 1904 in sysfs_blk_trace_attr_store()
    1898            ret = 0;
    1899            if (bt == NULL)
    1900                    ret = blk_trace_setup_queue(q, bdev);
    1901
    1902            if (ret == 0) {
    1903                    if (attr == &dev_attr_act_mask)
    >>>     CID 1460458:  Null pointer dereferences  (FORWARD_NULL)
    >>>     Dereferencing null pointer "bt".
    1904                            bt->act_mask = value;
    1905                    else if (attr == &dev_attr_pid)
    1906                            bt->pid = value;
    1907                    else if (attr == &dev_attr_start_lba)
    1908                            bt->start_lba = value;
    1909                    else if (attr == &dev_attr_end_lba)
    ```
    
    Added a reassignment with RCU annotation to fix the issue.
    
    Fixes: c780e86dd48 ("blktrace: Protect q->blk_trace with RCU")
    Reviewed-by: Ming Lei <ming.lei@redhat.com>
    Reviewed-by: Bob Liu <bob.liu@oracle.com>
    Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: Cengiz Can <cengiz@kernel.wtf>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 4398bce1bdf258f7d67bcc38c46f5fa9546448bd
Author: Jan Kara <jack@suse.cz>
Date:   Thu Feb 6 15:28:12 2020 +0100

    blktrace: Protect q->blk_trace with RCU
    
    commit c780e86dd48ef6467a1146cf7d0fe1e05a635039 upstream.
    
    KASAN is reporting that __blk_add_trace() has a use-after-free issue
    when accessing q->blk_trace. Indeed the switching of block tracing (and
    thus eventual freeing of q->blk_trace) is completely unsynchronized with
    the currently running tracing and thus it can happen that the blk_trace
    structure is being freed just while __blk_add_trace() works on it.
    Protect accesses to q->blk_trace by RCU during tracing and make sure we
    wait for the end of RCU grace period when shutting down tracing. Luckily
    that is rare enough event that we can afford that. Note that postponing
    the freeing of blk_trace to an RCU callback should better be avoided as
    it could have unexpected user visible side-effects as debugfs files
    would be still existing for a short while block tracing has been shut
    down.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=205711
    Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Reviewed-by: Ming Lei <ming.lei@redhat.com>
    Tested-by: Ming Lei <ming.lei@redhat.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Reported-by: Tristan Madani <tristmd@gmail.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    [bwh: Backported to 3.16:
     - Drop changes in blk_trace_note_message_enabled(), blk_trace_bio_get_cgid()
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 12b91f8bd81a4e97c86bbf4ebbec35fec7c33dce
Author: Davidlohr Bueso <dave@stgolabs.ne>
Date:   Fri Oct 30 05:25:59 2015 +0900

    blktrace: re-write setting q->blk_trace
    
    commit cdea01b2bf98affb7e9c44530108a4a28535eee8 upstream.
    
    This is really about simplifying the double xchg patterns into
    a single cmpxchg, with the same logic. Other than the immediate
    cleanup, there are some subtleties this change deals with:
    
    (i) While the load of the old bt is fully ordered wrt everything,
    ie:
    
            old_bt = xchg(&q->blk_trace, bt);             [barrier]
            if (old_bt)
                 (void) xchg(&q->blk_trace, old_bt);    [barrier]
    
    blk_trace could still be changed between the xchg and the old_bt
    load. Note that this description is merely theoretical and afaict
    very small, but doing everything in a single context with cmpxchg
    closes this potential race.
    
    (ii) Ordering guarantees are obviously kept with cmpxchg.
    
    (iii) Gets rid of the hacky-by-nature (void)xchg pattern.
    
    Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
    eviewed-by: Jeff Moyer <jmoyer@redhat.com>
    Signed-off-by: Jens Axboe <axboe@fb.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit c3ad4536984df3869f42144a1449e9f27f42e524
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Feb 1 16:26:45 2020 +0000

    vfs: fix do_last() regression
    
    commit 6404674acd596de41fd3ad5f267b4525494a891a upstream.
    
    Brown paperbag time: fetching ->i_uid/->i_mode really should've been
    done from nd->inode.  I even suggested that, but the reason for that has
    slipped through the cracks and I went for dir->d_inode instead - made
    for more "obvious" patch.
    
    Analysis:
    
     - at the entry into do_last() and all the way to step_into(): dir (aka
       nd->path.dentry) is known not to have been freed; so's nd->inode and
       it's equal to dir->d_inode unless we are already doomed to -ECHILD.
       inode of the file to get opened is not known.
    
     - after step_into(): inode of the file to get opened is known; dir
       might be pointing to freed memory/be negative/etc.
    
     - at the call of may_create_in_sticky(): guaranteed to be out of RCU
       mode; inode of the file to get opened is known and pinned; dir might
       be garbage.
    
    The last was the reason for the original patch.  Except that at the
    do_last() entry we can be in RCU mode and it is possible that
    nd->path.dentry->d_inode has already changed under us.
    
    In that case we are going to fail with -ECHILD, but we need to be
    careful; nd->inode is pointing to valid struct inode and it's the same
    as nd->path.dentry->d_inode in "won't fail with -ECHILD" case, so we
    should use that.
    
    Reported-by: "Rantala, Tommi T. (Nokia - FI/Espoo)" <tommi.t.rantala@nokia.com>
    Reported-by: syzbot+190005201ced78a74ad6@syzkaller.appspotmail.com
    Wearing-brown-paperbag: Al Viro <viro@zeniv.linux.org.uk>
    Fixes: d0cb50185ae9 ("do_last(): fetch directory ->i_mode and ->i_uid before it's too late")
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit c690e18e2e1c697b86767340e2b1b4d6fd62aaf8
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Jan 26 09:29:34 2020 -0500

    do_last(): fetch directory ->i_mode and ->i_uid before it's too late
    
    commit d0cb50185ae942b03c4327be322055d622dc79f6 upstream.
    
    may_create_in_sticky() call is done when we already have dropped the
    reference to dir.
    
    Fixes: 30aba6656f61e (namei: allow restricted O_CREAT of FIFOs and regular files)
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit dc076c9a4580000773df6c64ad716f261baede30
Author: Salvatore Mesoraca <s.mesoraca16@gmail.com>
Date:   Thu Aug 23 17:00:35 2018 -0700

    namei: allow restricted O_CREAT of FIFOs and regular files
    
    commit 30aba6656f61ed44cba445a3c0d38b296fa9e8f5 upstream.
    
    Disallows open of FIFOs or regular files not owned by the user in world
    writable sticky directories, unless the owner is the same as that of the
    directory or the file is opened without the O_CREAT flag.  The purpose
    is to make data spoofing attacks harder.  This protection can be turned
    on and off separately for FIFOs and regular files via sysctl, just like
    the symlinks/hardlinks protection.  This patch is based on Openwall's
    "HARDEN_FIFO" feature by Solar Designer.
    
    This is a brief list of old vulnerabilities that could have been prevented
    by this feature, some of them even allow for privilege escalation:
    
    CVE-2000-1134
    CVE-2007-3852
    CVE-2008-0525
    CVE-2009-0416
    CVE-2011-4834
    CVE-2015-1838
    CVE-2015-7442
    CVE-2016-7489
    
    This list is not meant to be complete.  It's difficult to track down all
    vulnerabilities of this kind because they were often reported without any
    mention of this particular attack vector.  In fact, before
    hardlinks/symlinks restrictions, fifos/regular files weren't the favorite
    vehicle to exploit them.
    
    [s.mesoraca16@gmail.com: fix bug reported by Dan Carpenter]
      Link: https://lkml.kernel.org/r/20180426081456.GA7060@mwanda
      Link: http://lkml.kernel.org/r/1524829819-11275-1-git-send-email-s.mesoraca16@gmail.com
    [keescook@chromium.org: drop pr_warn_ratelimited() in favor of audit changes in the future]
    [keescook@chromium.org: adjust commit subjet]
    Link: http://lkml.kernel.org/r/20180416175918.GA13494@beast
    Signed-off-by: Salvatore Mesoraca <s.mesoraca16@gmail.com>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Suggested-by: Solar Designer <solar@openwall.com>
    Suggested-by: Kees Cook <keescook@chromium.org>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8242918c8417c9f974c4a87d063b46d0145279eb
Author: Cong Wang <xiyou.wangcong@gmail.com>
Date:   Wed Jan 22 15:42:02 2020 -0800

    net_sched: fix datalen for ematch
    
    commit 61678d28d4a45ef376f5d02a839cc37509ae9281 upstream.
    
    syzbot reported an out-of-bound access in em_nbyte. As initially
    analyzed by Eric, this is because em_nbyte sets its own em->datalen
    in em_nbyte_change() other than the one specified by user, but this
    value gets overwritten later by its caller tcf_em_validate().
    We should leave em->datalen untouched to respect their choices.
    
    I audit all the in-tree ematch users, all of those implement
    ->change() set em->datalen, so we can just avoid setting it twice
    in this case.
    
    Reported-and-tested-by: syzbot+5af9a90dad568aa9f611@syzkaller.appspotmail.com
    Reported-by: syzbot+2f07903a5b05e7f36410@syzkaller.appspotmail.com
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: Eric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.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 e563075334194087aa98891c2acb6a4c580ef4a7
Author: Finn Thain <fthain@telegraphics.com.au>
Date:   Thu Jan 23 09:07:26 2020 +1100

    net/sonic: Quiesce SONIC before re-initializing descriptor memory
    
    commit 3f4b7e6a2be982fd8820a2b54d46dd9c351db899 upstream.
    
    Make sure the SONIC's DMA engine is idle before altering the transmit
    and receive descriptors. Add a helper for this as it will be needed
    again.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Tested-by: Stan Johnson <userm57@yahoo.com>
    Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 0d3cdd62b46d1ddddd86946990561365d1437179
Author: Finn Thain <fthain@telegraphics.com.au>
Date:   Thu Jan 23 09:07:26 2020 +1100

    net/sonic: Fix receive buffer handling
    
    commit 9e311820f67e740f4fb8dcb82b4c4b5b05bdd1a5 upstream.
    
    The SONIC can sometimes advance its rx buffer pointer (RRP register)
    without advancing its rx descriptor pointer (CRDA register). As a result
    the index of the current rx descriptor may not equal that of the current
    rx buffer. The driver mistakenly assumes that they are always equal.
    This assumption leads to incorrect packet lengths and possible packet
    duplication. Avoid this by calling a new function to locate the buffer
    corresponding to a given descriptor.
    
    Fixes: efcce839360f ("[PATCH] macsonic/jazzsonic network drivers update")
    Tested-by: Stan Johnson <userm57@yahoo.com>
    Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 89b53997625383a73d0bc64f49c574e2577801fc
Author: Finn Thain <fthain@telegraphics.com.au>
Date:   Thu Jan 23 09:07:26 2020 +1100

    net/sonic: Use MMIO accessors
    
    commit e3885f576196ddfc670b3d53e745de96ffcb49ab upstream.
    
    The driver accesses descriptor memory which is simultaneously accessed by
    the chip, so the compiler must not be allowed to re-order CPU accesses.
    sonic_buf_get() used 'volatile' to prevent that. sonic_buf_put() should
    have done so too but was overlooked.
    
    Fixes: efcce839360f ("[PATCH] macsonic/jazzsonic network drivers update")
    Tested-by: Stan Johnson <userm57@yahoo.com>
    Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 6b04c8723625fe96240f451b425bb1e84172debe
Author: Finn Thain <fthain@telegraphics.com.au>
Date:   Thu Jan 23 09:07:26 2020 +1100

    net/sonic: Add mutual exclusion for accessing shared state
    
    commit 865ad2f2201dc18685ba2686f13217f8b3a9c52c upstream.
    
    The netif_stop_queue() call in sonic_send_packet() races with the
    netif_wake_queue() call in sonic_interrupt(). This causes issues
    like "NETDEV WATCHDOG: eth0 (macsonic): transmit queue 0 timed out".
    Fix this by disabling interrupts when accessing tx_skb[] and next_tx.
    Update a comment to clarify the synchronization properties.
    
    Fixes: efcce839360f ("[PATCH] macsonic/jazzsonic network drivers update")
    Tested-by: Stan Johnson <userm57@yahoo.com>
    Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit db6c908c9e2974c87688d3165c157b0e59c8d532
Author: Mao Wenan <maowenan@huawei.com>
Date:   Thu Sep 5 09:57:12 2019 +0800

    net: sonic: return NETDEV_TX_OK if failed to map buffer
    
    commit 6e1cdedcf0362fed3aedfe051d46bd7ee2a85fe1 upstream.
    
    NETDEV_TX_BUSY really should only be used by drivers that call
    netif_tx_stop_queue() at the wrong moment. If dma_map_single() is
    failed to map tx DMA buffer, it might trigger an infinite loop.
    This patch use NETDEV_TX_OK instead of NETDEV_TX_BUSY, and change
    printk to pr_err_ratelimited.
    
    Fixes: d9fb9f384292 ("*sonic/natsemi/ns83829: Move the National Semi-conductor drivers")
    Signed-off-by: Mao Wenan <maowenan@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 10912babe0dff14eea532492a6b9c55f1471fd75
Author: Richard Palethorpe <rpalethorpe@suse.com>
Date:   Tue Jan 21 14:42:58 2020 +0100

    can, slip: Protect tty->disc_data in write_wakeup and close with RCU
    
    commit 0ace17d56824165c7f4c68785d6b58971db954dd upstream.
    
    write_wakeup can happen in parallel with close/hangup where tty->disc_data
    is set to NULL and the netdevice is freed thus also freeing
    disc_data. write_wakeup accesses disc_data so we must prevent close from
    freeing the netdev while write_wakeup has a non-NULL view of
    tty->disc_data.
    
    We also need to make sure that accesses to disc_data are atomic. Which can
    all be done with RCU.
    
    This problem was found by Syzkaller on SLCAN, but the same issue is
    reproducible with the SLIP line discipline using an LTP test based on the
    Syzkaller reproducer.
    
    A fix which didn't use RCU was posted by Hillf Danton.
    
    Fixes: 661f7fda21b1 ("slip: Fix deadlock in write_wakeup")
    Fixes: a8e83b17536a ("slcan: Port write_wakeup deadlock fix from slip")
    Reported-by: syzbot+017e491ae13c0068598a@syzkaller.appspotmail.com
    Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
    Cc: Wolfgang Grandegger <wg@grandegger.com>
    Cc: Marc Kleine-Budde <mkl@pengutronix.de>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Tyler Hall <tylerwhall@gmail.com>
    Cc: linux-can@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Cc: syzkaller@googlegroups.com
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 51c7752ea61a9c57858ef666233e25071e93d700
Author: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Date:   Wed Jan 15 10:54:35 2020 +0100

    mmc: sdhci: fix minimum clock rate for v3 controller
    
    commit 2a187d03352086e300daa2044051db00044cd171 upstream.
    
    For SDHCIv3+ with programmable clock mode, minimal clock frequency is
    still base clock / max(divider). Minimal programmable clock frequency is
    always greater than minimal divided clock frequency. Without this patch,
    SDHCI uses out-of-spec initial frequency when multiplier is big enough:
    
    mmc1: mmc_rescan_try_freq: trying to init card at 468750 Hz
    [for 480 MHz source clock divided by 1024]
    
    The code in sdhci_calc_clk() already chooses a correct SDCLK clock mode.
    
    Fixes: c3ed3877625f ("mmc: sdhci: add support for programmable clock mode")
    Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Link: https://lore.kernel.org/r/ffb489519a446caffe7a0a05c4b9372bd52397bb.1579082031.git.mirq-linux@rere.qmqm.pl
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit bbe20becd3f9b67d68a135e2e2d872a391ea92e0
Author: Alex Sverdlin <alexander.sverdlin@nokia.com>
Date:   Wed Jan 8 15:57:47 2020 +0100

    ARM: 8950/1: ftrace/recordmcount: filter relocation types
    
    commit 927d780ee371d7e121cea4fc7812f6ef2cea461c upstream.
    
    Scenario 1, ARMv7
    =================
    
    If code in arch/arm/kernel/ftrace.c would operate on mcount() pointer
    the following may be generated:
    
    00000230 <prealloc_fixed_plts>:
     230:   b5f8            push    {r3, r4, r5, r6, r7, lr}
     232:   b500            push    {lr}
     234:   f7ff fffe       bl      0 <__gnu_mcount_nc>
                            234: R_ARM_THM_CALL     __gnu_mcount_nc
     238:   f240 0600       movw    r6, #0
                            238: R_ARM_THM_MOVW_ABS_NC      __gnu_mcount_nc
     23c:   f8d0 1180       ldr.w   r1, [r0, #384]  ; 0x180
    
    FTRACE currently is not able to deal with it:
    
    WARNING: CPU: 0 PID: 0 at .../kernel/trace/ftrace.c:1979 ftrace_bug+0x1ad/0x230()
    ...
    CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.4.116-... #1
    ...
    [<c0314e3d>] (unwind_backtrace) from [<c03115e9>] (show_stack+0x11/0x14)
    [<c03115e9>] (show_stack) from [<c051a7f1>] (dump_stack+0x81/0xa8)
    [<c051a7f1>] (dump_stack) from [<c0321c5d>] (warn_slowpath_common+0x69/0x90)
    [<c0321c5d>] (warn_slowpath_common) from [<c0321cf3>] (warn_slowpath_null+0x17/0x1c)
    [<c0321cf3>] (warn_slowpath_null) from [<c038ee9d>] (ftrace_bug+0x1ad/0x230)
    [<c038ee9d>] (ftrace_bug) from [<c038f1f9>] (ftrace_process_locs+0x27d/0x444)
    [<c038f1f9>] (ftrace_process_locs) from [<c08915bd>] (ftrace_init+0x91/0xe8)
    [<c08915bd>] (ftrace_init) from [<c0885a67>] (start_kernel+0x34b/0x358)
    [<c0885a67>] (start_kernel) from [<00308095>] (0x308095)
    ---[ end trace cb88537fdc8fa200 ]---
    ftrace failed to modify [<c031266c>] prealloc_fixed_plts+0x8/0x60
     actual: 44:f2:e1:36
    ftrace record flags: 0
     (0)   expected tramp: c03143e9
    
    Scenario 2, ARMv4T
    ==================
    
    ftrace: allocating 14435 entries in 43 pages
    ------------[ cut here ]------------
    WARNING: CPU: 0 PID: 0 at kernel/trace/ftrace.c:2029 ftrace_bug+0x204/0x310
    CPU: 0 PID: 0 Comm: swapper Not tainted 4.19.5 #1
    Hardware name: Cirrus Logic EDB9302 Evaluation Board
    [<c0010a24>] (unwind_backtrace) from [<c000ecb0>] (show_stack+0x20/0x2c)
    [<c000ecb0>] (show_stack) from [<c03c72e8>] (dump_stack+0x20/0x30)
    [<c03c72e8>] (dump_stack) from [<c0021c18>] (__warn+0xdc/0x104)
    [<c0021c18>] (__warn) from [<c0021d7c>] (warn_slowpath_null+0x4c/0x5c)
    [<c0021d7c>] (warn_slowpath_null) from [<c0095360>] (ftrace_bug+0x204/0x310)
    [<c0095360>] (ftrace_bug) from [<c04dabac>] (ftrace_init+0x3b4/0x4d4)
    [<c04dabac>] (ftrace_init) from [<c04cef4c>] (start_kernel+0x20c/0x410)
    [<c04cef4c>] (start_kernel) from [<00000000>] (  (null))
    ---[ end trace 0506a2f5dae6b341 ]---
    ftrace failed to modify
    [<c000c350>] perf_trace_sys_exit+0x5c/0xe8
     actual:   1e:ff:2f:e1
    Initializing ftrace call sites
    ftrace record flags: 0
     (0)
     expected tramp: c000fb24
    
    The analysis for this problem has been already performed previously,
    refer to the link below.
    
    Fix the above problems by allowing only selected reloc types in
    __mcount_loc. The list itself comes from the legacy recordmcount.pl
    script.
    
    Link: https://lore.kernel.org/lkml/56961010.6000806@pengutronix.de/
    Fixes: ed60453fa8f8 ("ARM: 6511/1: ftrace: add ARM support for C version of recordmcount")
    Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com>
    Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5d758c6f9239bbbcb41175b3e56977a30345031b
Author: Luuk Paulussen <luuk.paulussen@alliedtelesis.co.nz>
Date:   Fri Dec 6 12:16:59 2019 +1300

    hwmon: (adt7475) Make volt2reg return same reg as reg2volt input
    
    commit cf3ca1877574a306c0207cbf7fdf25419d9229df upstream.
    
    reg2volt returns the voltage that matches a given register value.
    Converting this back the other way with volt2reg didn't return the same
    register value because it used truncation instead of rounding.
    
    This meant that values read from sysfs could not be written back to sysfs
    to set back the same register value.
    
    With this change, volt2reg will return the same value for every voltage
    previously returned by reg2volt (for the set of possible input values)
    
    Signed-off-by: Luuk Paulussen <luuk.paulussen@alliedtelesis.co.nz>
    Link: https://lore.kernel.org/r/20191205231659.1301-1-luuk.paulussen@alliedtelesis.co.nz
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 56cda5ce62bc98d32bf2a36f93efbdb2a44ffcca
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 17 15:35:26 2020 +0100

    USB: serial: quatech2: handle unbound ports
    
    commit 9715a43eea77e42678a1002623f2d9a78f5b81a1 upstream.
    
    Check for NULL port data in the modem- and line-status handlers to avoid
    dereferencing a NULL pointer in the unlikely case where a port device
    isn't bound to a driver (e.g. after an allocation failure on port
    probe).
    
    Note that the other (stubbed) event handlers qt2_process_xmit_empty()
    and qt2_process_flush() would need similar sanity checks in case they
    are ever implemented.
    
    Fixes: f7a33e608d9a ("USB: serial: add quatech2 usb to serial driver")
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 30039fa5d5176a600581e996f5ef574a2bb54ecf
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 17 10:50:25 2020 +0100

    USB: serial: keyspan: handle unbound ports
    
    commit 3018dd3fa114b13261e9599ddb5656ef97a1fa17 upstream.
    
    Check for NULL port data in the control URB completion handlers to avoid
    dereferencing a NULL pointer in the unlikely case where a port device
    isn't bound to a driver (e.g. after an allocation failure on port
    probe()).
    
    Fixes: 0ca1268e109a ("USB Serial Keyspan: add support for USA-49WG & USA-28XG")
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 12cd5dd09950850b53eb46569356880f3c27d1b7
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 17 10:50:24 2020 +0100

    USB: serial: io_edgeport: add missing active-port sanity check
    
    commit 1568c58d11a7c851bd09341aeefd6a1c308ac40d upstream.
    
    The driver receives the active port number from the device, but never
    made sure that the port number was valid. This could lead to a
    NULL-pointer dereference or memory corruption in case a device sends
    data for an invalid port.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2e776d31365e5cbc8ec9001501de90d1fc4003e9
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 17 10:50:23 2020 +0100

    USB: serial: io_edgeport: handle unbound ports on URB completion
    
    commit e37d1aeda737a20b1846a91a3da3f8b0f00cf690 upstream.
    
    Check for NULL port data in the shared interrupt and bulk completion
    callbacks to avoid dereferencing a NULL pointer in case a device sends
    data for a port device which isn't bound to a driver (e.g. due to a
    malicious device having unexpected endpoints or after an allocation
    failure on port probe).
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7ec357b173081537c77d47e144ed1bcece37ad0f
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 17 10:50:22 2020 +0100

    USB: serial: ch341: handle unbound port at reset_resume
    
    commit 4d5ef53f75c22d28f490bcc5c771fcc610a9afa4 upstream.
    
    Check for NULL port data in reset_resume() to avoid dereferencing a NULL
    pointer in case the port device isn't bound to a driver (e.g. after a
    failed control request at port probe).
    
    Fixes: 1ded7ea47b88 ("USB: ch341 serial: fix port number changed after resume")
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 65868d902435d22913d4439a46b15467fd22d009
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Jan 16 17:07:05 2020 +0100

    USB: serial: suppress driver bind attributes
    
    commit fdb838efa31e1ed9a13ae6ad0b64e30fdbd00570 upstream.
    
    USB-serial drivers must not be unbound from their ports before the
    corresponding USB driver is unbound from the parent interface so
    suppress the bind and unbind attributes.
    
    Unbinding a serial driver while it's port is open is a sure way to
    trigger a crash as any driver state is released on unbind while port
    hangup is handled on the parent USB interface level. Drivers for
    multiport devices where ports share a resource such as an interrupt
    endpoint also generally cannot handle individual ports going away.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8a9cfc2c5656ecd1234edd08ff346a89e78c5e41
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Jan 13 10:38:57 2020 -0800

    Input: keyspan-remote - fix control-message timeouts
    
    commit ba9a103f40fc4a3ec7558ec9b0b97d4f92034249 upstream.
    
    The driver was issuing synchronous uninterruptible control requests
    without using a timeout. This could lead to the driver hanging on probe
    due to a malfunctioning (or malicious) device until the device is
    physically disconnected. While sleeping in probe the driver prevents
    other devices connected to the same hub from being added to (or removed
    from) the bus.
    
    The USB upper limit of five seconds per request should be more than
    enough.
    
    Fixes: 99f83c9c9ac9 ("[PATCH] USB: add driver for Keyspan Digital Remote")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://lore.kernel.org/r/20200113171715.30621-1-johan@kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 10a830fe87a2694c32f9d890ea700e50ab11bb78
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Jan 14 13:00:35 2020 -0800

    macvlan: use skb_reset_mac_header() in macvlan_queue_xmit()
    
    commit 1712b2fff8c682d145c7889d2290696647d82dab upstream.
    
    I missed the fact that macvlan_broadcast() can be used both
    in RX and TX.
    
    skb_eth_hdr() makes only sense in TX paths, so we can not
    use it blindly in macvlan_broadcast()
    
    Fixes: 96cc4b69581d ("macvlan: do not assume mac_header is set in macvlan_broadcast()")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: Jurgen Van Ham <juvanham@gmail.com>
    Tested-by: Matteo Croce <mcroce@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit f042797e7c9dd3d3bef34ad547c4516e3a191741
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Wed Jan 15 08:35:25 2020 -0500

    block: fix an integer overflow in logical block size
    
    commit ad6bf88a6c19a39fb3b0045d78ea880325dfcf15 upstream.
    
    Logical block size has type unsigned short. That means that it can be at
    most 32768. However, there are architectures that can run with 64k pages
    (for example arm64) and on these architectures, it may be possible to
    create block devices with 64k block size.
    
    For exmaple (run this on an architecture with 64k pages):
    
    Mount will fail with this error because it tries to read the superblock using 2-sector
    access:
      device-mapper: writecache: I/O is not aligned, sector 2, size 1024, block size 65536
      EXT4-fs (dm-0): unable to read superblock
    
    This patch changes the logical block size from unsigned short to unsigned
    int to avoid the overflow.
    
    Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
    Reviewed-by: Ming Lei <ming.lei@redhat.com>
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit cd854f82f9613aed317c92844bbfb70060d6491d
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Jan 7 21:15:49 2020 +0100

    scsi: fnic: fix invalid stack access
    
    commit 42ec15ceaea74b5f7a621fc6686cbf69ca66c4cf upstream.
    
    gcc -O3 warns that some local variables are not properly initialized:
    
    drivers/scsi/fnic/vnic_dev.c: In function 'fnic_dev_hang_notify':
    drivers/scsi/fnic/vnic_dev.c:511:16: error: 'a0' is used uninitialized in this function [-Werror=uninitialized]
      vdev->args[0] = *a0;
      ~~~~~~~~~~~~~~^~~~~
    drivers/scsi/fnic/vnic_dev.c:691:6: note: 'a0' was declared here
      u64 a0, a1;
          ^~
    drivers/scsi/fnic/vnic_dev.c:512:16: error: 'a1' is used uninitialized in this function [-Werror=uninitialized]
      vdev->args[1] = *a1;
      ~~~~~~~~~~~~~~^~~~~
    drivers/scsi/fnic/vnic_dev.c:691:10: note: 'a1' was declared here
      u64 a0, a1;
              ^~
    drivers/scsi/fnic/vnic_dev.c: In function 'fnic_dev_mac_addr':
    drivers/scsi/fnic/vnic_dev.c:512:16: error: 'a1' is used uninitialized in this function [-Werror=uninitialized]
      vdev->args[1] = *a1;
      ~~~~~~~~~~~~~~^~~~~
    drivers/scsi/fnic/vnic_dev.c:698:10: note: 'a1' was declared here
      u64 a0, a1;
              ^~
    
    Apparently the code relies on the local variables occupying adjacent memory
    locations in the same order, but this is of course not guaranteed.
    
    Use an array of two u64 variables where needed to make it work correctly.
    
    I suspect there is also an endianness bug here, but have not digged in deep
    enough to be sure.
    
    Fixes: 5df6d737dd4b ("[SCSI] fnic: Add new Cisco PCI-Express FCoE HBA")
    Fixes: mmtom ("init/Kconfig: enable -O3 for all arches")
    Link: https://lore.kernel.org/r/20200107201602.4096790-1-arnd@arndb.de
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 664629181917a295dd357fa0c2aa85527f0694af
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Jan 15 21:37:33 2020 +0100

    ALSA: seq: Fix racy access for queue timer in proc read
    
    commit 60adcfde92fa40fcb2dbf7cc52f9b096e0cd109a upstream.
    
    snd_seq_info_timer_read() reads the information of the timer assigned
    for each queue, but it's done in a racy way which may lead to UAF as
    spotted by syzkaller.
    
    This patch applies the missing q->timer_mutex lock while accessing the
    timer object as well as a slight code change to adapt the standard
    coding style.
    
    Reported-by: syzbot+2b2ef983f973e5c40943@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/r/20200115203733.26530-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 142a3566ff01658cdd00e190e3412901633cb680
Author: Jari Ruusu <jari.ruusu@gmail.com>
Date:   Sun Jan 12 15:00:53 2020 +0200

    Fix built-in early-load Intel microcode alignment
    
    commit f5ae2ea6347a308cfe91f53b53682ce635497d0d upstream.
    
    Intel Software Developer's Manual, volume 3, chapter 9.11.6 says:
    
     "Note that the microcode update must be aligned on a 16-byte boundary
      and the size of the microcode update must be 1-KByte granular"
    
    When early-load Intel microcode is loaded from initramfs, userspace tool
    'iucode_tool' has already 16-byte aligned those microcode bits in that
    initramfs image.  Image that was created something like this:
    
     iucode_tool --write-earlyfw=FOO.cpio microcode-files...
    
    However, when early-load Intel microcode is loaded from built-in
    firmware BLOB using CONFIG_EXTRA_FIRMWARE= kernel config option, that
    16-byte alignment is not guaranteed.
    
    Fix this by forcing all built-in firmware BLOBs to 16-byte alignment.
    
    [ If we end up having other firmware with much bigger alignment
      requirements, we might need to introduce some method for the firmware
      to specify it, this is the minimal "just increase the alignment a bit
      to account for this one special case" patch    - Linus ]
    
    Signed-off-by: Jari Ruusu <jari.ruusu@gmail.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Fenghua Yu <fenghua.yu@intel.com>
    Cc: Luis Chamberlain <mcgrof@kernel.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    [bwh: Backported to 3.16: adjust filename, context, indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b9e00a5405345be002ad79c3c43e1c89ab06d384
Author: Keiya Nobuta <nobuta.keiya@fujitsu.com>
Date:   Thu Jan 9 14:14:48 2020 +0900

    usb: core: hub: Improved device recognition on remote wakeup
    
    commit 9c06ac4c83df6d6fbdbf7488fbad822b4002ba19 upstream.
    
    If hub_activate() is called before D+ has stabilized after remote
    wakeup, the following situation might occur:
    
             __      ___________________
            /  \    /
    D+   __/    \__/
    
    Hub  _______________________________
              |  ^   ^           ^
              |  |   |           |
    Host _____v__|___|___________|______
              |  |   |           |
              |  |   |           \-- Interrupt Transfer (*3)
              |  |    \-- ClearPortFeature (*2)
              |   \-- GetPortStatus (*1)
              \-- Host detects remote wakeup
    
    - D+ goes high, Host starts running by remote wakeup
    - D+ is not stable, goes low
    - Host requests GetPortStatus at (*1) and gets the following hub status:
      - Current Connect Status bit is 0
      - Connect Status Change bit is 1
    - D+ stabilizes, goes high
    - Host requests ClearPortFeature and thus Connect Status Change bit is
      cleared at (*2)
    - After waiting 100 ms, Host starts the Interrupt Transfer at (*3)
    - Since the Connect Status Change bit is 0, Hub returns NAK.
    
    In this case, port_event() is not called in hub_event() and Host cannot
    recognize device. To solve this issue, flag change_bits even if only
    Connect Status Change bit is 1 when got in the first GetPortStatus.
    
    This issue occurs rarely because it only if D+ changes during a very
    short time between GetPortStatus and ClearPortFeature. However, it is
    fatal if it occurs in embedded system.
    
    Signed-off-by: Keiya Nobuta <nobuta.keiya@fujitsu.com>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20200109051448.28150-1-nobuta.keiya@fujitsu.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a95d9e284c593ab213829bd15df59bb9731fe226
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Jan 14 09:27:29 2020 +0100

    r8152: add missing endpoint sanity check
    
    commit 86f3f4cd53707ceeec079b83205c8d3c756eca93 upstream.
    
    Add missing endpoint sanity check to probe in order to prevent a
    NULL-pointer dereference (or slab out-of-bounds access) when retrieving
    the interrupt-endpoint bInterval on ndo_open() in case a device lacks
    the expected endpoints.
    
    Fixes: 40a82917b1d3 ("net/usb/r8152: enable interrupt transfer")
    Cc: hayeswang <hayeswang@realtek.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 92f13288053b69ea84cb2ed3f5bd6bfaba8a879d
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Jan 13 18:22:13 2020 +0100

    USB: serial: opticon: fix control-message timeouts
    
    commit 5e28055f340275a8616eee88ef19186631b4d136 upstream.
    
    The driver was issuing synchronous uninterruptible control requests
    without using a timeout. This could lead to the driver hanging
    on open() or tiocmset() due to a malfunctioning (or malicious) device
    until the device is physically disconnected.
    
    The USB upper limit of five seconds per request should be more than
    enough.
    
    Fixes: 309a057932ab ("USB: opticon: add rts and cts support")
    Cc: Martin Jansen <martin.jansen@opticon.com>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8618f8f922fdee3f47ad1e47a1a7e35c465c8891
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Jan 14 09:39:53 2020 +0100

    ALSA: usb-audio: fix sync-ep altsetting sanity check
    
    commit 5d1b71226dc4d44b4b65766fa9d74492f9d4587b upstream.
    
    The altsetting sanity check in set_sync_ep_implicit_fb_quirk() was
    checking for there to be at least one altsetting but then went on to
    access the second one, which may not exist.
    
    This could lead to random slab data being used to initialise the sync
    endpoint in snd_usb_add_endpoint().
    
    Fixes: c75a8a7ae565 ("ALSA: snd-usb: add support for implicit feedback")
    Fixes: ca10a7ebdff1 ("ALSA: usb-audio: FT C400 sync playback EP to capture EP")
    Fixes: 5e35dc0338d8 ("ALSA: usb-audio: add implicit fb quirk for Behringer UFX1204")
    Fixes: 17f08b0d9aaf ("ALSA: usb-audio: add implicit fb quirk for Axe-Fx II")
    Fixes: 103e9625647a ("ALSA: usb-audio: simplify set_sync_ep_implicit_fb_quirk")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20200114083953.1106-1-johan@kernel.org
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 61f82e764ab094ad314740dee5aa65f2d282096b
Author: Alberto Aguirre <albaguirre@gmail.com>
Date:   Wed Apr 18 09:35:34 2018 -0500

    ALSA: usb-audio: simplify set_sync_ep_implicit_fb_quirk
    
    commit 103e9625647ad74d201e26fb74afcd8479142a37 upstream.
    
    Signed-off-by: Alberto Aguirre <albaguirre@gmail.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit be20dfeb1c206aa86f02fd6d0841209e64a7bafe
Author: Alberto Aguirre <albaguirre@gmail.com>
Date:   Thu Dec 8 00:36:48 2016 -0600

    ALSA: usb-audio: add implicit fb quirk for Axe-Fx II
    
    commit 17f08b0d9aafccdb10038ab6dbd9ddb6433c13e2 upstream.
    
    The Axe-Fx II implicit feedback end point and the data sync endpoint
    are in different interface descriptors. Add quirk to ensure a sync
    endpoint is properly configured.
    
    Signed-off-by: Alberto Aguirre <albaguirre@gmail.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 06b984bd8ee2f8e1abced595ccf0cc2502cd0220
Author: Florian Westphal <fw@strlen.de>
Date:   Sat Jan 11 23:19:53 2020 +0100

    netfilter: arp_tables: init netns pointer in xt_tgdtor_param struct
    
    commit 212e7f56605ef9688d0846db60c6c6ec06544095 upstream.
    
    An earlier commit (1b789577f655060d98d20e,
    "netfilter: arp_tables: init netns pointer in xt_tgchk_param struct")
    fixed missing net initialization for arptables, but turns out it was
    incomplete.  We can get a very similar struct net NULL deref during
    error unwinding:
    
    general protection fault: 0000 [#1] PREEMPT SMP KASAN
    RIP: 0010:xt_rateest_put+0xa1/0x440 net/netfilter/xt_RATEEST.c:77
     xt_rateest_tg_destroy+0x72/0xa0 net/netfilter/xt_RATEEST.c:175
     cleanup_entry net/ipv4/netfilter/arp_tables.c:509 [inline]
     translate_table+0x11f4/0x1d80 net/ipv4/netfilter/arp_tables.c:587
     do_replace net/ipv4/netfilter/arp_tables.c:981 [inline]
     do_arpt_set_ctl+0x317/0x650 net/ipv4/netfilter/arp_tables.c:1461
    
    Also init the netns pointer in xt_tgdtor_param struct.
    
    Fixes: add67461240c1d ("netfilter: add struct net * to target parameters")
    Reported-by: syzbot+91bdd8eece0f6629ec8b@syzkaller.appspotmail.com
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    [bwh: Backported to 3.16:
     - __arpt_unregister_table() has not been split out of
       arpt_unregister_table()
     - Add "net" parameter to arpt_unregister_table() and update its only
       caller in arptable_filter.c]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b7e18348617f7e7f93409860a1aedd543ba91e3d
Author: Cong Wang <xiyou.wangcong@gmail.com>
Date:   Fri Jan 10 11:53:08 2020 -0800

    netfilter: fix a use-after-free in mtype_destroy()
    
    commit c120959387efa51479056fd01dc90adfba7a590c upstream.
    
    map->members is freed by ip_set_free() right before using it in
    mtype_ext_cleanup() again. So we just have to move it down.
    
    Reported-by: syzbot+4c3cc6dbe7259dbf9054@syzkaller.appspotmail.com
    Fixes: 40cd63bf33b2 ("netfilter: ipset: Support extensions which need a per data destroy function")
    Acked-by: Jozsef Kadlecsik <kadlec@netfilter.org>
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 6c6411270fe2599f10bf05ca7673ddf841d60e15
Author: Jerónimo Borque <jeronimo@borque.com.ar>
Date:   Thu Jan 9 12:23:34 2020 -0300

    USB: serial: simple: Add Motorola Solutions TETRA MTP3xxx and MTP85xx
    
    commit 260e41ac4dd3e5acb90be624c03ba7f019615b75 upstream.
    
    Add device-ids for the Motorola Solutions TETRA radios MTP3xxx series
    and MTP85xx series
    
    $ lsusb -vd 0cad:
    
    Bus 001 Device 009: ID 0cad:9015 Motorola CGISS TETRA PEI interface
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.00
      bDeviceClass            0
      bDeviceSubClass         0
      bDeviceProtocol         0
      bMaxPacketSize0        64
      idVendor           0x0cad Motorola CGISS
      idProduct          0x9015
      bcdDevice           24.16
      iManufacturer           1
      iProduct                2
      iSerial                 0
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength       0x0037
        bNumInterfaces          2
        bConfigurationValue     1
        iConfiguration          3
        bmAttributes         0x80
          (Bus Powered)
        MaxPower              500mA
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass       255 Vendor Specific Class
          bInterfaceSubClass      0
          bInterfaceProtocol      0
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x81  EP 1 IN
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x01  EP 1 OUT
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               0
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass       255 Vendor Specific Class
          bInterfaceSubClass      0
          bInterfaceProtocol      0
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x82  EP 2 IN
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x02  EP 2 OUT
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               0
    
    Bus 001 Device 010: ID 0cad:9013 Motorola CGISS TETRA PEI interface
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.00
      bDeviceClass            0
      bDeviceSubClass         0
      bDeviceProtocol         0
      bMaxPacketSize0        64
      idVendor           0x0cad Motorola CGISS
      idProduct          0x9013
      bcdDevice           24.16
      iManufacturer           1
      iProduct                2
      iSerial                 0
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength       0x0037
        bNumInterfaces          2
        bConfigurationValue     1
        iConfiguration          3
        bmAttributes         0x80
          (Bus Powered)
        MaxPower              500mA
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass       255 Vendor Specific Class
          bInterfaceSubClass      0
          bInterfaceProtocol      0
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x81  EP 1 IN
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0200  1x 512 bytes
            bInterval               0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x01  EP 1 OUT
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0200  1x 512 bytes
            bInterval               0
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass       255 Vendor Specific Class
          bInterfaceSubClass      0
          bInterfaceProtocol      0
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x82  EP 2 IN
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0200  1x 512 bytes
            bInterval               0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x02  EP 2 OUT
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0200  1x 512 bytes
            bInterval               0
    
    Signed-off-by: Jerónimo Borque <jeronimo@borque.com.ar>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 45e2bd165d1e2af238a412a9795180110d7100dd
Author: Lars Möllendorf <lars.moellendorf@plating.de>
Date:   Fri Dec 13 14:50:55 2019 +0100

    iio: buffer: align the size of scan bytes to size of the largest element
    
    commit 883f616530692d81cb70f8a32d85c0d2afc05f69 upstream.
    
    Previous versions of `iio_compute_scan_bytes` only aligned each element
    to its own length (i.e. its own natural alignment). Because multiple
    consecutive sets of scan elements are buffered this does not work in
    case the computed scan bytes do not align with the natural alignment of
    the first scan element in the set.
    
    This commit fixes this by aligning the scan bytes to the natural
    alignment of the largest scan element in the set.
    
    Fixes: 959d2952d124 ("staging:iio: make iio_sw_buffer_preenable much more general.")
    Signed-off-by: Lars Möllendorf <lars.moellendorf@plating.de>
    Reviewed-by: Lars-Peter Clausen <lars@metafoo.de>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 87af328d3645462688bff70b2ade89faaf74cde2
Author: Jian-Hong Pan <jian-hong@endlessm.com>
Date:   Mon Dec 30 16:30:45 2019 +0800

    platform/x86: asus-wmi: Fix keyboard brightness cannot be set to 0
    
    commit 176a7fca81c5090a7240664e3002c106d296bf31 upstream.
    
    Some of ASUS laptops like UX431FL keyboard backlight cannot be set to
    brightness 0. According to ASUS' information, the brightness should be
    0x80 ~ 0x83. This patch fixes it by following the logic.
    
    Fixes: e9809c0b9670 ("asus-wmi: add keyboard backlight support")
    Signed-off-by: Jian-Hong Pan <jian-hong@endlessm.com>
    Reviewed-by: Daniel Drake <drake@endlessm.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 76999e39c032d449f40b281faa2ad314d0419309
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 10 12:01:27 2020 -0800

    Input: sur40 - fix interface sanity checks
    
    commit 6b32391ed675827f8425a414abbc6fbd54ea54fe upstream.
    
    Make sure to use the current alternate setting when verifying the
    interface descriptors to avoid binding to an invalid interface.
    
    This in turn could cause the driver to misbehave or trigger a WARN() in
    usb_submit_urb() that kernels with panic_on_warn set would choke on.
    
    Fixes: bdb5c57f209c ("Input: add sur40 driver for Samsung SUR40 (aka MS Surface 2.0/Pixelsense)")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Acked-by: Vladis Dronov <vdronov@redhat.com>
    Link: https://lore.kernel.org/r/20191210113737.4016-8-johan@kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2e667102296b1f6a57c3cfdf35992ecf434b3b35
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 10 12:00:18 2020 -0800

    Input: gtco - fix endpoint sanity check
    
    commit a8eeb74df5a6bdb214b2b581b14782c5f5a0cf83 upstream.
    
    The driver was checking the number of endpoints of the first alternate
    setting instead of the current one, something which could lead to the
    driver binding to an invalid interface.
    
    This in turn could cause the driver to misbehave or trigger a WARN() in
    usb_submit_urb() that kernels with panic_on_warn set would choke on.
    
    Fixes: 162f98dea487 ("Input: gtco - fix crash on detecting device without endpoints")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Acked-by: Vladis Dronov <vdronov@redhat.com>
    Link: https://lore.kernel.org/r/20191210113737.4016-5-johan@kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 106028125d11cfa19a4bc7bee53bc43b9fa88009
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Jan 10 11:59:32 2020 -0800

    Input: aiptek - fix endpoint sanity check
    
    commit 3111491fca4f01764e0c158c5e0f7ced808eef51 upstream.
    
    The driver was checking the number of endpoints of the first alternate
    setting instead of the current one, something which could lead to the
    driver binding to an invalid interface.
    
    This in turn could cause the driver to misbehave or trigger a WARN() in
    usb_submit_urb() that kernels with panic_on_warn set would choke on.
    
    Fixes: 8e20cf2bce12 ("Input: aiptek - fix crash on detecting device without endpoints")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Acked-by: Vladis Dronov <vdronov@redhat.com>
    Link: https://lore.kernel.org/r/20191210113737.4016-3-johan@kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2cd104ae7ab56c3ec2c9fa08239392532bc43e72
Author: Jiri Kosina <jkosina@suse.cz>
Date:   Fri Jan 10 15:32:51 2020 +0100

    HID: hidraw, uhid: Always report EPOLLOUT
    
    commit 9e635c2851df6caee651e589fbf937b637973c91 upstream.
    
    hidraw and uhid device nodes are always available for writing so we should
    always report EPOLLOUT and EPOLLWRNORM bits, not only in the cases when
    there is nothing to read.
    
    Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
    Fixes: be54e7461ffdc ("HID: uhid: Fix returning EPOLLOUT from uhid_char_poll")
    Fixes: 9f3b61dc1dd7b ("HID: hidraw: Fix returning EPOLLOUT from hidraw_poll")
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    [bwh: Backported to 3.16:
     - Use unsigned int type instead of __poll_t
     - s/EPOLL/POLL/g]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8648e95e3aa1a3d01423a98b5234192c811fc4bf
Author: Marcel Holtmann <marcel@holtmann.org>
Date:   Wed Dec 4 03:37:13 2019 +0100

    HID: hidraw: Fix returning EPOLLOUT from hidraw_poll
    
    commit 9f3b61dc1dd7b81e99e7ed23776bb64a35f39e1a upstream.
    
    When polling a connected /dev/hidrawX device, it is useful to get the
    EPOLLOUT when writing is possible. Since writing is possible as soon as
    the device is connected, always return it.
    
    Right now EPOLLOUT is only returned when there are also input reports
    are available. This works if devices start sending reports when
    connected, but some HID devices might need an output report first before
    sending any input reports. This change will allow using EPOLLOUT here as
    well.
    
    Fixes: 378b80370aa1 ("hidraw: Return EPOLLOUT from hidraw_poll")
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    [bwh: Backported to 3.16: s/EPOLL/POLL/g]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit dcec894fc7aea9b106aae4d04e71e9888150335e
Author: Fabian Henneke <fabian.henneke@gmail.com>
Date:   Tue Jul 9 13:03:37 2019 +0200

    hidraw: Return EPOLLOUT from hidraw_poll
    
    commit 378b80370aa1fe50f9c48a3ac8af3e416e73b89f upstream.
    
    Always return EPOLLOUT from hidraw_poll when a device is connected.
    This is safe since writes are always possible (but will always block).
    
    hidraw does not support non-blocking writes and instead always calls
    blocking backend functions on write requests. Hence, so far, a call to
    poll never returned EPOLLOUT, which confuses tools like socat.
    
    Signed-off-by: Fabian Henneke <fabian.henneke@gmail.com>
    In-reply-to: <CA+hv5qkyis03CgYTWeWX9cr0my-d2Oe+aZo+mjmWRXgjrGqyrw@mail.gmail.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    [bwh: Backported to 3.16: s/EPOLL/POLL/]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 19adcb64cd1d94a74356c4cd08a715a0b609d576
Author: James Bottomley <James.Bottomley@HansenPartnership.com>
Date:   Wed Jan 8 17:21:32 2020 -0800

    scsi: enclosure: Fix stale device oops with hot replug
    
    commit 529244bd1afc102ab164429d338d310d5d65e60d upstream.
    
    Doing an add/remove/add on a SCSI device in an enclosure leads to an oops
    caused by poisoned values in the enclosure device list pointers.  The
    reason is because we are keeping the enclosure device across the enclosed
    device add/remove/add but the current code is doing a
    device_add/device_del/device_add on it.  This is the wrong thing to do in
    sysfs, so fix it by not doing a device_del on the enclosure device simply
    because of a hot remove of the drive in the slot.
    
    [mkp: added missing email addresses]
    
    Fixes: 43d8eb9cfd0a ("[SCSI] ses: add support for enclosure component hot removal")
    Link: https://lore.kernel.org/r/1578532892.3852.10.camel@HansenPartnership.com
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Reported-by: Luo Jiaxing <luojiaxing@huawei.com>
    Tested-by: John Garry <john.garry@huawei.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 02f56a8486d10a37321a50e0aba739036eada641
Author: Xiang Chen <chenxiang66@hisilicon.com>
Date:   Thu Jan 9 09:12:24 2020 +0800

    scsi: sd: Clear sdkp->protection_type if disk is reformatted without PI
    
    commit 465f4edaecc6c37f81349233e84d46246bcac11a upstream.
    
    If an attached disk with protection information enabled is reformatted
    to Type 0 the revalidation code does not clear the original protection
    type and subsequent accesses will keep setting RDPROTECT/WRPROTECT.
    
    Set the protection type to 0 if the disk reports PROT_EN=0 in READ
    CAPACITY(16).
    
    [mkp: commit desc]
    
    Fixes: fe542396da73 ("[SCSI] sd: Ensure we correctly disable devices with unknown protection type")
    Link: https://lore.kernel.org/r/1578532344-101668-1-git-send-email-chenxiang66@hisilicon.com
    Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 4a53d290900d7ae04a917ac8c2c5f0daf9eb434a
Author: Radoslaw Tyl <radoslawx.tyl@intel.com>
Date:   Mon Nov 25 15:24:52 2019 +0100

    ixgbevf: Remove limit of 10 entries for unicast filter list
    
    commit aa604651d523b1493988d0bf6710339f3ee60272 upstream.
    
    Currently, though the FDB entry is added to VF, it does not appear in
    RAR filters. VF driver only allows to add 10 entries. Attempting to add
    another causes an error. This patch removes limitation and allows use of
    all free RAR entries for the FDB if needed.
    
    Fixes: 46ec20ff7d ("ixgbevf: Add macvlan support in the set rx mode op")
    Signed-off-by: Radoslaw Tyl <radoslawx.tyl@intel.com>
    Acked-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 31b0e897d56872508840be6b9a0910f1ec2e4004
Author: Florian Westphal <fw@strlen.de>
Date:   Wed Jan 8 10:59:38 2020 +0100

    netfilter: ipset: avoid null deref when IPSET_ATTR_LINENO is present
    
    commit 22dad713b8a5ff488e07b821195270672f486eb2 upstream.
    
    The set uadt functions assume lineno is never NULL, but it is in
    case of ip_set_utest().
    
    syzkaller managed to generate a netlink message that calls this with
    LINENO attr present:
    
    general protection fault: 0000 [#1] PREEMPT SMP KASAN
    RIP: 0010:hash_mac4_uadt+0x1bc/0x470 net/netfilter/ipset/ip_set_hash_mac.c:104
    Call Trace:
     ip_set_utest+0x55b/0x890 net/netfilter/ipset/ip_set_core.c:1867
     nfnetlink_rcv_msg+0xcf2/0xfb0 net/netfilter/nfnetlink.c:229
     netlink_rcv_skb+0x177/0x450 net/netlink/af_netlink.c:2477
     nfnetlink_rcv+0x1ba/0x460 net/netfilter/nfnetlink.c:563
    
    pass a dummy lineno storage, its easier than patching all set
    implementations.
    
    This seems to be a day-0 bug.
    
    Cc: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
    Reported-by: syzbot+34bd2369d38707f3f4a7@syzkaller.appspotmail.com
    Fixes: a7b4f989a6294 ("netfilter: ipset: IP set core support")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Acked-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit cf332804451d181af55b65ce0052ca2b365c7dd6
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Jan 6 12:30:48 2020 -0800

    macvlan: do not assume mac_header is set in macvlan_broadcast()
    
    commit 96cc4b69581db68efc9749ef32e9cf8e0160c509 upstream.
    
    Use of eth_hdr() in tx path is error prone.
    
    Many drivers call skb_reset_mac_header() before using it,
    but others do not.
    
    Commit 6d1ccff62780 ("net: reset mac header in dev_start_xmit()")
    attempted to fix this generically, but commit d346a3fae3ff
    ("packet: introduce PACKET_QDISC_BYPASS socket option") brought
    back the macvlan bug.
    
    Lets add a new helper, so that tx paths no longer have
    to call skb_reset_mac_header() only to get a pointer
    to skb->data.
    
    Hopefully we will be able to revert 6d1ccff62780
    ("net: reset mac header in dev_start_xmit()") and save few cycles
    in transmit fast path.
    
    BUG: KASAN: use-after-free in __get_unaligned_cpu32 include/linux/unaligned/packed_struct.h:19 [inline]
    BUG: KASAN: use-after-free in mc_hash drivers/net/macvlan.c:251 [inline]
    BUG: KASAN: use-after-free in macvlan_broadcast+0x547/0x620 drivers/net/macvlan.c:277
    Read of size 4 at addr ffff8880a4932401 by task syz-executor947/9579
    
    CPU: 0 PID: 9579 Comm: syz-executor947 Not tainted 5.5.0-rc4-syzkaller #0
    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+0x197/0x210 lib/dump_stack.c:118
     print_address_description.constprop.0.cold+0xd4/0x30b mm/kasan/report.c:374
     __kasan_report.cold+0x1b/0x41 mm/kasan/report.c:506
     kasan_report+0x12/0x20 mm/kasan/common.c:639
     __asan_report_load_n_noabort+0xf/0x20 mm/kasan/generic_report.c:145
     __get_unaligned_cpu32 include/linux/unaligned/packed_struct.h:19 [inline]
     mc_hash drivers/net/macvlan.c:251 [inline]
     macvlan_broadcast+0x547/0x620 drivers/net/macvlan.c:277
     macvlan_queue_xmit drivers/net/macvlan.c:520 [inline]
     macvlan_start_xmit+0x402/0x77f drivers/net/macvlan.c:559
     __netdev_start_xmit include/linux/netdevice.h:4447 [inline]
     netdev_start_xmit include/linux/netdevice.h:4461 [inline]
     dev_direct_xmit+0x419/0x630 net/core/dev.c:4079
     packet_direct_xmit+0x1a9/0x250 net/packet/af_packet.c:240
     packet_snd net/packet/af_packet.c:2966 [inline]
     packet_sendmsg+0x260d/0x6220 net/packet/af_packet.c:2991
     sock_sendmsg_nosec net/socket.c:639 [inline]
     sock_sendmsg+0xd7/0x130 net/socket.c:659
     __sys_sendto+0x262/0x380 net/socket.c:1985
     __do_sys_sendto net/socket.c:1997 [inline]
     __se_sys_sendto net/socket.c:1993 [inline]
     __x64_sys_sendto+0xe1/0x1a0 net/socket.c:1993
     do_syscall_64+0xfa/0x790 arch/x86/entry/common.c:294
     entry_SYSCALL_64_after_hwframe+0x49/0xbe
    RIP: 0033:0x442639
    Code: 18 89 d0 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 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 5b 10 fc ff c3 66 2e 0f 1f 84 00 00 00 00
    RSP: 002b:00007ffc13549e08 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
    RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 0000000000442639
    RDX: 000000000000000e RSI: 0000000020000080 RDI: 0000000000000003
    RBP: 0000000000000004 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 0000000000403bb0 R14: 0000000000000000 R15: 0000000000000000
    
    Allocated by task 9389:
     save_stack+0x23/0x90 mm/kasan/common.c:72
     set_track mm/kasan/common.c:80 [inline]
     __kasan_kmalloc mm/kasan/common.c:513 [inline]
     __kasan_kmalloc.constprop.0+0xcf/0xe0 mm/kasan/common.c:486
     kasan_kmalloc+0x9/0x10 mm/kasan/common.c:527
     __do_kmalloc mm/slab.c:3656 [inline]
     __kmalloc+0x163/0x770 mm/slab.c:3665
     kmalloc include/linux/slab.h:561 [inline]
     tomoyo_realpath_from_path+0xc5/0x660 security/tomoyo/realpath.c:252
     tomoyo_get_realpath security/tomoyo/file.c:151 [inline]
     tomoyo_path_perm+0x230/0x430 security/tomoyo/file.c:822
     tomoyo_inode_getattr+0x1d/0x30 security/tomoyo/tomoyo.c:129
     security_inode_getattr+0xf2/0x150 security/security.c:1222
     vfs_getattr+0x25/0x70 fs/stat.c:115
     vfs_statx_fd+0x71/0xc0 fs/stat.c:145
     vfs_fstat include/linux/fs.h:3265 [inline]
     __do_sys_newfstat+0x9b/0x120 fs/stat.c:378
     __se_sys_newfstat fs/stat.c:375 [inline]
     __x64_sys_newfstat+0x54/0x80 fs/stat.c:375
     do_syscall_64+0xfa/0x790 arch/x86/entry/common.c:294
     entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    Freed by task 9389:
     save_stack+0x23/0x90 mm/kasan/common.c:72
     set_track mm/kasan/common.c:80 [inline]
     kasan_set_free_info mm/kasan/common.c:335 [inline]
     __kasan_slab_free+0x102/0x150 mm/kasan/common.c:474
     kasan_slab_free+0xe/0x10 mm/kasan/common.c:483
     __cache_free mm/slab.c:3426 [inline]
     kfree+0x10a/0x2c0 mm/slab.c:3757
     tomoyo_realpath_from_path+0x1a7/0x660 security/tomoyo/realpath.c:289
     tomoyo_get_realpath security/tomoyo/file.c:151 [inline]
     tomoyo_path_perm+0x230/0x430 security/tomoyo/file.c:822
     tomoyo_inode_getattr+0x1d/0x30 security/tomoyo/tomoyo.c:129
     security_inode_getattr+0xf2/0x150 security/security.c:1222
     vfs_getattr+0x25/0x70 fs/stat.c:115
     vfs_statx_fd+0x71/0xc0 fs/stat.c:145
     vfs_fstat include/linux/fs.h:3265 [inline]
     __do_sys_newfstat+0x9b/0x120 fs/stat.c:378
     __se_sys_newfstat fs/stat.c:375 [inline]
     __x64_sys_newfstat+0x54/0x80 fs/stat.c:375
     do_syscall_64+0xfa/0x790 arch/x86/entry/common.c:294
     entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    The buggy address belongs to the object at ffff8880a4932000
     which belongs to the cache kmalloc-4k of size 4096
    The buggy address is located 1025 bytes inside of
     4096-byte region [ffff8880a4932000, ffff8880a4933000)
    The buggy address belongs to the page:
    page:ffffea0002924c80 refcount:1 mapcount:0 mapping:ffff8880aa402000 index:0x0 compound_mapcount: 0
    raw: 00fffe0000010200 ffffea0002846208 ffffea00028f3888 ffff8880aa402000
    raw: 0000000000000000 ffff8880a4932000 0000000100000001 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff8880a4932300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff8880a4932380: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff8880a4932400: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                       ^
     ffff8880a4932480: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff8880a4932500: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    
    Fixes: b863ceb7ddce ("[NET]: Add macvlan driver")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.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 2641f299648d5cc35eec3d4daa7b586203d3f5bb
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Jan 6 06:10:39 2020 -0800

    pkt_sched: fq: do not accept silly TCA_FQ_QUANTUM
    
    commit d9e15a2733067c9328fb56d98fe8e574fa19ec31 upstream.
    
    As diagnosed by Florian :
    
    If TCA_FQ_QUANTUM is set to 0x80000000, fq_deueue()
    can loop forever in :
    
    if (f->credit <= 0) {
      f->credit += q->quantum;
      goto begin;
    }
    
    ... because f->credit is either 0 or -2147483648.
    
    Let's limit TCA_FQ_QUANTUM to no more than 1 << 20 :
    This max value should limit risks of breaking user setups
    while fixing this bug.
    
    Fixes: afe4fd062416 ("pkt_sched: fq: Fair Queue packet scheduler")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Diagnosed-by: Florian Westphal <fw@strlen.de>
    Reported-by: syzbot+dc9071cc5a85950bdfce@syzkaller.appspotmail.com
    Signed-off-by: David S. Miller <davem@davemloft.net>
    [bwh: Backported to 3.16: Drop call to NL_SET_ERR_MSG_MOD() as extack is
     not supported.]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3facfec87efad82083061633190d06552348fa24
Author: Kenneth Klette Jonassen <kennetkl@ifi.uio.no>
Date:   Tue Feb 3 17:49:18 2015 +0100

    pkt_sched: fq: avoid hang when quantum 0
    
    commit 3725a269815ba6dbb415feddc47da5af7d1fac58 upstream.
    
    Configuring fq with quantum 0 hangs the system, presumably because of a
    non-interruptible infinite loop. Either way quantum 0 does not make sense.
    
    Reproduce with:
    sudo tc qdisc add dev lo root fq quantum 0 initial_quantum 0
    ping 127.0.0.1
    
    Signed-off-by: Kenneth Klette Jonassen <kennetkl@ifi.uio.no>
    Acked-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 43261ab1e5b88426774b0b35557088e231ce4e4b
Author: Chen-Yu Tsai <wens@csie.org>
Date:   Mon Jan 6 11:09:22 2020 +0800

    net: stmmac: dwmac-sunxi: Allow all RGMII modes
    
    commit 52cc73e5404c7ba0cbfc50cb4c265108c84b3d5a upstream.
    
    Allow all the RGMII modes to be used. This would allow us to represent
    the hardware better in the device tree with RGMII_ID where in most
    cases the PHY's internal delay for both RX and TX are used.
    
    Fixes: af0bd4e9ba80 ("net: stmmac: sunxi platform extensions for GMAC in Allwinner A20 SoC's")
    Signed-off-by: Chen-Yu Tsai <wens@csie.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 14258a285f34ab0595b2859c5ded5d2fde955320
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Jan 7 01:42:25 2020 -0800

    vlan: vlan_changelink() should propagate errors
    
    commit eb8ef2a3c50092bb018077c047b8dba1ce0e78e3 upstream.
    
    Both vlan_dev_change_flags() and vlan_dev_set_egress_priority()
    can return an error. vlan_changelink() should not ignore them.
    
    Fixes: 07b5b17e157b ("[VLAN]: Use rtnl_link API")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 755d6cc4f5b58ccd0547fa96dce21d7ab4af7cd3
Author: Xin Long <lucien.xin@gmail.com>
Date:   Sat Jan 4 14:15:02 2020 +0800

    sctp: free cmd->obj.chunk for the unprocessed SCTP_CMD_REPLY
    
    commit be7a7729207797476b6666f046d765bdf9630407 upstream.
    
    This patch is to fix a memleak caused by no place to free cmd->obj.chunk
    for the unprocessed SCTP_CMD_REPLY. This issue occurs when failing to
    process a cmd while there're still SCTP_CMD_REPLY cmds on the cmd seq
    with an allocated chunk in cmd->obj.chunk.
    
    So fix it by freeing cmd->obj.chunk for each SCTP_CMD_REPLY cmd left on
    the cmd seq when any cmd returns error. While at it, also remove 'nomem'
    label.
    
    Reported-by: syzbot+107c4aff5f392bf1517f@syzkaller.appspotmail.com
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 6a0a5980a6092c82258858c7588f8bbb36df6026
Author: Will Deacon <will@kernel.org>
Date:   Thu Dec 19 12:02:03 2019 +0000

    chardev: Avoid potential use-after-free in 'chrdev_open()'
    
    commit 68faa679b8be1a74e6663c21c3a9d25d32f1c079 upstream.
    
    'chrdev_open()' calls 'cdev_get()' to obtain a reference to the
    'struct cdev *' stashed in the 'i_cdev' field of the target inode
    structure. If the pointer is NULL, then it is initialised lazily by
    looking up the kobject in the 'cdev_map' and so the whole procedure is
    protected by the 'cdev_lock' spinlock to serialise initialisation of
    the shared pointer.
    
    Unfortunately, it is possible for the initialising thread to fail *after*
    installing the new pointer, for example if the subsequent '->open()' call
    on the file fails. In this case, 'cdev_put()' is called, the reference
    count on the kobject is dropped and, if nobody else has taken a reference,
    the release function is called which finally clears 'inode->i_cdev' from
    'cdev_purge()' before potentially freeing the object. The problem here
    is that a racing thread can happily take the 'cdev_lock' and see the
    non-NULL pointer in the inode, which can result in a refcount increment
    from zero and a warning:
    
      |  ------------[ cut here ]------------
      |  refcount_t: addition on 0; use-after-free.
      |  WARNING: CPU: 2 PID: 6385 at lib/refcount.c:25 refcount_warn_saturate+0x6d/0xf0
      |  Modules linked in:
      |  CPU: 2 PID: 6385 Comm: repro Not tainted 5.5.0-rc2+ #22
      |  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
      |  RIP: 0010:refcount_warn_saturate+0x6d/0xf0
      |  Code: 05 55 9a 15 01 01 e8 9d aa c8 ff 0f 0b c3 80 3d 45 9a 15 01 00 75 ce 48 c7 c7 00 9c 62 b3 c6 08
      |  RSP: 0018:ffffb524c1b9bc70 EFLAGS: 00010282
      |  RAX: 0000000000000000 RBX: ffff9e9da1f71390 RCX: 0000000000000000
      |  RDX: ffff9e9dbbd27618 RSI: ffff9e9dbbd18798 RDI: ffff9e9dbbd18798
      |  RBP: 0000000000000000 R08: 000000000000095f R09: 0000000000000039
      |  R10: 0000000000000000 R11: ffffb524c1b9bb20 R12: ffff9e9da1e8c700
      |  R13: ffffffffb25ee8b0 R14: 0000000000000000 R15: ffff9e9da1e8c700
      |  FS:  00007f3b87d26700(0000) GS:ffff9e9dbbd00000(0000) knlGS:0000000000000000
      |  CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      |  CR2: 00007fc16909c000 CR3: 000000012df9c000 CR4: 00000000000006e0
      |  DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      |  DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      |  Call Trace:
      |   kobject_get+0x5c/0x60
      |   cdev_get+0x2b/0x60
      |   chrdev_open+0x55/0x220
      |   ? cdev_put.part.3+0x20/0x20
      |   do_dentry_open+0x13a/0x390
      |   path_openat+0x2c8/0x1470
      |   do_filp_open+0x93/0x100
      |   ? selinux_file_ioctl+0x17f/0x220
      |   do_sys_open+0x186/0x220
      |   do_syscall_64+0x48/0x150
      |   entry_SYSCALL_64_after_hwframe+0x44/0xa9
      |  RIP: 0033:0x7f3b87efcd0e
      |  Code: 89 54 24 08 e8 a3 f4 ff ff 8b 74 24 0c 48 8b 3c 24 41 89 c0 44 8b 54 24 08 b8 01 01 00 00 89 f4
      |  RSP: 002b:00007f3b87d259f0 EFLAGS: 00000293 ORIG_RAX: 0000000000000101
      |  RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f3b87efcd0e
      |  RDX: 0000000000000000 RSI: 00007f3b87d25a80 RDI: 00000000ffffff9c
      |  RBP: 00007f3b87d25e90 R08: 0000000000000000 R09: 0000000000000000
      |  R10: 0000000000000000 R11: 0000000000000293 R12: 00007ffe188f504e
      |  R13: 00007ffe188f504f R14: 00007f3b87d26700 R15: 0000000000000000
      |  ---[ end trace 24f53ca58db8180a ]---
    
    Since 'cdev_get()' can already fail to obtain a reference, simply move
    it over to use 'kobject_get_unless_zero()' instead of 'kobject_get()',
    which will cause the racing thread to return -ENXIO if the initialising
    thread fails unexpectedly.
    
    Cc: Hillf Danton <hdanton@sina.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Reported-by: syzbot+82defefbbd8527e1c2cb@syzkaller.appspotmail.com
    Signed-off-by: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20191219120203.32691-1-will@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit f0ad2031d82fe550c4b34aed5dbc84e2febd021b
Author: Jan Kara <jack@suse.cz>
Date:   Thu Mar 23 01:37:01 2017 +0100

    kobject: Export kobject_get_unless_zero()
    
    commit c70c176ff8c3ff0ac6ef9a831cd591ea9a66bd1a upstream.
    
    Make the function available for outside use and fortify it against NULL
    kobject.
    
    CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com>
    Acked-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Jens Axboe <axboe@fb.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5d6c167fb5498bc3c32dfcb37f144ceb5c2d9138
Author: Kaitao Cheng <pilgrimtao@gmail.com>
Date:   Tue Dec 31 05:35:30 2019 -0800

    kernel/trace: Fix do not unregister tracepoints when register sched_migrate_task fail
    
    commit 50f9ad607ea891a9308e67b81f774c71736d1098 upstream.
    
    In the function, if register_trace_sched_migrate_task() returns error,
    sched_switch/sched_wakeup_new/sched_wakeup won't unregister. That is
    why fail_deprobe_sched_switch was added.
    
    Link: http://lkml.kernel.org/r/20191231133530.2794-1-pilgrimtao@gmail.com
    
    Fixes: 478142c39c8c2 ("tracing: do not grab lock in wakeup latency function tracing")
    Signed-off-by: Kaitao Cheng <pilgrimtao@gmail.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 34f745918748a479330036413a6b212957c62ac9
Author: Michael Straube <straube.linux@gmail.com>
Date:   Sat Dec 28 15:37:25 2019 +0100

    staging: rtl8188eu: Add device code for TP-Link TL-WN727N v5.21
    
    commit 58dcc5bf4030cab548d5c98cd4cd3632a5444d5a upstream.
    
    This device was added to the stand-alone driver on github.
    Add it to the staging driver as well.
    
    Link: https://github.com/lwfinger/rtl8188eu/commit/b9b537aa25a8
    Signed-off-by: Michael Straube <straube.linux@gmail.com>
    Link: https://lore.kernel.org/r/20191228143725.24455-1-straube.linux@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit c59e74104cfd7df3ca0b5f59f1baee9c8c28b9ef
Author: Wen Yang <wenyang@linux.alibaba.com>
Date:   Fri Jan 3 11:02:48 2020 +0800

    ftrace: Avoid potential division by zero in function profiler
    
    commit e31f7939c1c27faa5d0e3f14519eaf7c89e8a69d upstream.
    
    The ftrace_profile->counter is unsigned long and
    do_div truncates it to 32 bits, which means it can test
    non-zero and be truncated to zero for division.
    Fix this issue by using div64_ul() instead.
    
    Link: http://lkml.kernel.org/r/20200103030248.14516-1-wenyang@linux.alibaba.com
    
    Fixes: e330b3bcd8319 ("tracing: Show sample std dev in function profiling")
    Fixes: 34886c8bc590f ("tracing: add average time in function to function profiler")
    Signed-off-by: Wen Yang <wenyang@linux.alibaba.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7fc973f532e791244b41eb9d0eb5dcc065e40b69
Author: Steven Rostedt (VMware) <rostedt@goodmis.org>
Date:   Thu Jan 2 22:02:41 2020 -0500

    tracing: Have stack tracer compile when MCOUNT_INSN_SIZE is not defined
    
    commit b8299d362d0837ae39e87e9019ebe6b736e0f035 upstream.
    
    On some archs with some configurations, MCOUNT_INSN_SIZE is not defined, and
    this makes the stack tracer fail to compile. Just define it to zero in this
    case.
    
    Link: https://lore.kernel.org/r/202001020219.zvE3vsty%lkp@intel.com
    
    Fixes: 4df297129f622 ("tracing: Remove most or all of stack tracer stack size from stack_max_size")
    Reported-by: kbuild test robot <lkp@intel.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 422cfb9353deb1fee4af4afad1e4cc83d01f6252
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Thu Jan 2 17:23:45 2020 +0800

    vxlan: fix tos value before xmit
    
    commit 71130f29979c7c7956b040673e6b9d5643003176 upstream.
    
    Before ip_tunnel_ecn_encap() and udp_tunnel_xmit_skb() we should filter
    tos value by RT_TOS() instead of using config tos directly.
    
    vxlan_get_route() would filter the tos to fl4.flowi4_tos but we didn't
    return it back, as geneve_get_v4_rt() did. So we have to use RT_TOS()
    directly in function ip_tunnel_ecn_encap().
    
    Fixes: 206aaafcd279 ("VXLAN: Use IP Tunnels tunnel ENC encap API")
    Fixes: 1400615d64cf ("vxlan: allow setting ipv6 traffic class")
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 88803afc2f21babbc1cb9b77cbeedcc76daa697f
Author: Pengcheng Yang <yangpc@wangsu.com>
Date:   Mon Dec 30 17:54:41 2019 +0800

    tcp: fix "old stuff" D-SACK causing SACK to be treated as D-SACK
    
    commit c9655008e7845bcfdaac10a1ed8554ec167aea88 upstream.
    
    When we receive a D-SACK, where the sequence number satisfies:
            undo_marker <= start_seq < end_seq <= prior_snd_una
    we consider this is a valid D-SACK and tcp_is_sackblock_valid()
    returns true, then this D-SACK is discarded as "old stuff",
    but the variable first_sack_index is not marked as negative
    in tcp_sacktag_write_queue().
    
    If this D-SACK also carries a SACK that needs to be processed
    (for example, the previous SACK segment was lost), this SACK
    will be treated as a D-SACK in the following processing of
    tcp_sacktag_write_queue(), which will eventually lead to
    incorrect updates of undo_retrans and reordering.
    
    Fixes: fd6dad616d4f ("[TCP]: Earlier SACK block verification & simplify access to them")
    Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7403ef766208bcf94b55318945f28c9ecf0db28b
Author: Florian Faber <faber@faberman.de>
Date:   Thu Dec 26 19:51:24 2019 +0100

    can: mscan: mscan_rx_poll(): fix rx path lockup when returning from polling to irq mode
    
    commit 2d77bd61a2927be8f4e00d9478fe6996c47e8d45 upstream.
    
    Under load, the RX side of the mscan driver can get stuck while TX still
    works. Restarting the interface locks up the system. This behaviour
    could be reproduced reliably on a MPC5121e based system.
    
    The patch fixes the return value of the NAPI polling function (should be
    the number of processed packets, not constant 1) and the condition under
    which IRQs are enabled again after polling is finished.
    
    With this patch, no more lockups were observed over a test period of ten
    days.
    
    Fixes: afa17a500a36 ("net/can: add driver for mscan family & mpc52xx_mscan")
    Signed-off-by: Florian Faber <faber@faberman.de>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 03c63ebadf1ed706b77cd9c4868184068aea2f87
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Dec 10 12:32:31 2019 +0100

    can: gs_usb: gs_usb_probe(): use descriptors of current altsetting
    
    commit 2f361cd9474ab2c4ab9ac8db20faf81e66c6279b upstream.
    
    Make sure to always use the descriptors of the current alternate setting
    to avoid future issues when accessing fields that may differ between
    settings.
    
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d2b540216a5408fef451ee377e6fd719daf4dc1a
Author: Paul Cercueil <paul@crapouillou.net>
Date:   Mon Dec 16 10:18:43 2019 -0600

    usb: musb: dma: Correct parameter passed to IRQ handler
    
    commit c80d0f4426c7fdc7efd6ae8d8b021dcfc89b4254 upstream.
    
    The IRQ handler was passed a pointer to a struct dma_controller, but the
    argument was then casted to a pointer to a struct musb_dma_controller.
    
    Fixes: 427c4f333474 ("usb: struct device - replace bus_id with dev_name(), dev_set_name()")
    Signed-off-by: Paul Cercueil <paul@crapouillou.net>
    Tested-by: Artur Rojek <contact@artur-rojek.eu>
    Signed-off-by: Bin Liu <b-liu@ti.com>
    Link: https://lore.kernel.org/r/20191216161844.772-2-b-liu@ti.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 488756587250fa6915d9adff84da203971727fe0
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Feb 3 16:38:29 2020 +0100

    USB: quirks: blacklist duplicate ep on Sound Devices USBPre2
    
    commit bdd1b147b8026df0e4260b387026b251d888ed01 upstream.
    
    This device has a broken vendor-specific altsetting for interface 1,
    where endpoint 0x85 is declared as an isochronous endpoint despite being
    used by interface 2 for audio capture.
    
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.00
      bDeviceClass          239 Miscellaneous Device
      bDeviceSubClass         2
      bDeviceProtocol         1 Interface Association
      bMaxPacketSize0        64
      idVendor           0x0926
      idProduct          0x0202
      bcdDevice            1.00
      iManufacturer           1 Sound Devices
      iProduct                2 USBPre2
      iSerial                 3 [...]
      bNumConfigurations      1
    
    [...]
    
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       3
          bNumEndpoints           2
          bInterfaceClass       255 Vendor Specific Class
          bInterfaceSubClass      0
          bInterfaceProtocol      0
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x85  EP 5 IN
            bmAttributes            5
              Transfer Type            Isochronous
              Synch Type               Asynchronous
              Usage Type               Data
            wMaxPacketSize     0x0126  1x 294 bytes
            bInterval               1
    
    [...]
    
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        2
          bAlternateSetting       1
          bNumEndpoints           1
          bInterfaceClass         1 Audio
          bInterfaceSubClass      2 Streaming
          bInterfaceProtocol      0
          iInterface              0
          AudioStreaming Interface Descriptor:
            bLength                 7
            bDescriptorType        36
            bDescriptorSubtype      1 (AS_GENERAL)
            bTerminalLink           4
            bDelay                  1 frames
            wFormatTag         0x0001 PCM
          AudioStreaming Interface Descriptor:
            bLength                26
            bDescriptorType        36
            bDescriptorSubtype      2 (FORMAT_TYPE)
            bFormatType             1 (FORMAT_TYPE_I)
            bNrChannels             2
            bSubframeSize           2
            bBitResolution         16
            bSamFreqType            6 Discrete
            tSamFreq[ 0]         8000
            tSamFreq[ 1]        16000
            tSamFreq[ 2]        24000
            tSamFreq[ 3]        32000
            tSamFreq[ 4]        44100
            tSamFreq[ 5]        48000
          Endpoint Descriptor:
            bLength                 9
            bDescriptorType         5
            bEndpointAddress     0x85  EP 5 IN
            bmAttributes            5
              Transfer Type            Isochronous
              Synch Type               Asynchronous
              Usage Type               Data
            wMaxPacketSize     0x0126  1x 294 bytes
            bInterval               4
            bRefresh                0
            bSynchAddress           0
            AudioStreaming Endpoint Descriptor:
              bLength                 7
              bDescriptorType        37
              bDescriptorSubtype      1 (EP_GENERAL)
              bmAttributes         0x01
                Sampling Frequency
              bLockDelayUnits         2 Decoded PCM samples
              wLockDelay         0x0000
    
    Since commit 3e4f8e21c4f2 ("USB: core: fix check for duplicate
    endpoints") USB core ignores any duplicate endpoints found during
    descriptor parsing, but in this case we need to ignore the first
    instance in order to avoid breaking the audio capture interface.
    
    Fixes: 3e4f8e21c4f2 ("USB: core: fix check for duplicate endpoints")
    Reported-by: edes <edes@gmx.net>
    Tested-by: edes <edes@gmx.net>
    Link: https://lore.kernel.org/r/20200201105829.5682c887@acme7.acmenet
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20200203153830.26394-3-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 4a1d109a7a7f58960976e01e81de7a75bc0c8359
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Feb 3 16:38:28 2020 +0100

    USB: core: add endpoint-blacklist quirk
    
    commit 73f8bda9b5dc1c69df2bc55c0cbb24461a6391a9 upstream.
    
    Add a new device quirk that can be used to blacklist endpoints.
    
    Since commit 3e4f8e21c4f2 ("USB: core: fix check for duplicate
    endpoints") USB core ignores any duplicate endpoints found during
    descriptor parsing.
    
    In order to handle devices where the first interfaces with duplicate
    endpoints are the ones that should have their endpoints ignored, we need
    to add a blacklist.
    
    Tested-by: edes <edes@gmx.net>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20200203153830.26394-2-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit acc7d80cde6232dd407987910538460cc65ceb26
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Dec 19 17:10:16 2019 +0100

    USB: core: fix check for duplicate endpoints
    
    commit 3e4f8e21c4f27bcf30a48486b9dcc269512b79ff upstream.
    
    Amend the endpoint-descriptor sanity checks to detect all duplicate
    endpoint addresses in a configuration.
    
    Commit 0a8fd1346254 ("USB: fix problems with duplicate endpoint
    addresses") added a check for duplicate endpoint addresses within a
    single alternate setting, but did not look for duplicate addresses in
    other interfaces.
    
    The current check would also not detect all duplicate addresses when one
    endpoint is as a (bi-directional) control endpoint.
    
    This specifically avoids overwriting the endpoint entries in struct
    usb_device when enabling a duplicate endpoint, something which could
    potentially lead to crashes or leaks, for example, when endpoints are
    later disabled.
    
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20191219161016.6695-1-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5b426e4aecfed58107dcf6400a1b809eda25f16d
Author: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Date:   Fri Dec 27 17:44:34 2019 +0000

    tty: always relink the port
    
    commit 273f632912f1b24b642ba5b7eb5022e43a72f3b5 upstream.
    
    If the serial device is disconnected and reconnected, it re-enumerates
    properly but does not link it. fwiw, linking means just saving the port
    index, so allow it always as there is no harm in saving the same value
    again even if it tries to relink with the same port.
    
    Fixes: fb2b90014d78 ("tty: link tty and port before configuring it as console")
    Reported-by: Kenneth R. Crudup <kenny@panix.com>
    Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Link: https://lore.kernel.org/r/20191227174434.12057-1-sudipm.mukherjee@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a9898712d493cce221bf3e39f064fd2eed72cfca
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Dec 27 01:33:10 2019 +0100

    netfilter: arp_tables: init netns pointer in xt_tgchk_param struct
    
    commit 1b789577f655060d98d20ed0c6f9fbd469d6ba63 upstream.
    
    We get crash when the targets checkentry function tries to make
    use of the network namespace pointer for arptables.
    
    When the net pointer got added back in 2010, only ip/ip6/ebtables were
    changed to initialize it, so arptables has this set to NULL.
    
    This isn't a problem for normal arptables because no existing
    arptables target has a checkentry function that makes use of par->net.
    
    However, direct users of the setsockopt interface can provide any
    target they want as long as its registered for ARP or UNPSEC protocols.
    
    syzkaller managed to send a semi-valid arptables rule for RATEEST target
    which is enough to trigger NULL deref:
    
    kasan: GPF could be caused by NULL-ptr deref or user memory access
    general protection fault: 0000 [#1] PREEMPT SMP KASAN
    RIP: xt_rateest_tg_checkentry+0x11d/0xb40 net/netfilter/xt_RATEEST.c:109
    [..]
     xt_check_target+0x283/0x690 net/netfilter/x_tables.c:1019
     check_target net/ipv4/netfilter/arp_tables.c:399 [inline]
     find_check_entry net/ipv4/netfilter/arp_tables.c:422 [inline]
     translate_table+0x1005/0x1d70 net/ipv4/netfilter/arp_tables.c:572
     do_replace net/ipv4/netfilter/arp_tables.c:977 [inline]
     do_arpt_set_ctl+0x310/0x640 net/ipv4/netfilter/arp_tables.c:1456
    
    Fixes: add67461240c1d ("netfilter: add struct net * to target parameters")
    Reported-by: syzbot+d7358a458d8a81aee898@syzkaller.appspotmail.com
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Acked-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a385813460ab61e5fad43782189b6b97f59d05fc
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Sun Dec 22 20:45:28 2019 +0200

    locks: print unsigned ino in /proc/locks
    
    commit 98ca480a8f22fdbd768e3dad07024c8d4856576c upstream.
    
    An ino is unsigned, so display it as such in /proc/locks.
    
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Jeff Layton <jlayton@kernel.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e584aa684635a3eb6e232bc15a94f593560a32f9
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Dec 18 20:26:06 2019 +0100

    ALSA: ice1724: Fix sleep-in-atomic in Infrasonic Quartet support code
    
    commit 0aec96f5897ac16ad9945f531b4bef9a2edd2ebd upstream.
    
    Jia-Ju Bai reported a possible sleep-in-atomic scenario in the ice1724
    driver with Infrasonic Quartet support code: namely, ice->set_rate
    callback gets called inside ice->reg_lock spinlock, while the callback
    in quartet.c holds ice->gpio_mutex.
    
    This patch fixes the invalid call: it simply moves the calls of
    ice->set_rate and ice->set_mclk callbacks outside the spinlock.
    
    Reported-by: Jia-Ju Bai <baijiaju1990@gmail.com>
    Link: https://lore.kernel.org/r/5d43135e-73b9-a46a-2155-9e91d0dcdf83@gmail.com
    Link: https://lore.kernel.org/r/20191218192606.12866-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 22598e60eb97d7f35692abfba736877f0d1fcdea
Author: Ard Biesheuvel <ardb@kernel.org>
Date:   Tue Dec 24 14:29:09 2019 +0100

    x86/efistub: Disable paging at mixed mode entry
    
    commit 4911ee401b7ceff8f38e0ac597cbf503d71e690c upstream.
    
    The EFI mixed mode entry code goes through the ordinary startup_32()
    routine before jumping into the kernel's EFI boot code in 64-bit
    mode. The 32-bit startup code must be entered with paging disabled,
    but this is not documented as a requirement for the EFI handover
    protocol, and so we should disable paging explicitly when entering
    the kernel from 32-bit EFI firmware.
    
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Cc: Arvind Sankar <nivedita@alum.mit.edu>
    Cc: Hans de Goede <hdegoede@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Link: https://lkml.kernel.org/r/20191224132909.102540-4-ardb@kernel.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 789982d12d66c8acc7b7f84b578b79d197682ae7
Author: Russell King <rmk+kernel@armlinux.org.uk>
Date:   Thu Dec 19 23:24:47 2019 +0000

    mod_devicetable: fix PHY module format
    
    commit d2ed49cf6c13e379c5819aa5ac20e1f9674ebc89 upstream.
    
    When a PHY is probed, if the top bit is set, we end up requesting a
    module with the string "mdio:-10101110000000100101000101010001" -
    the top bit is printed to a signed -1 value. This leads to the module
    not being loaded.
    
    Fix the module format string and the macro generating the values for
    it to ensure that we only print unsigned types and the top bit is
    always 0/1. We correctly end up with
    "mdio:10101110000000100101000101010001".
    
    Fixes: 8626d3b43280 ("phylib: Support phy module autoloading")
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit dea7e0f877379272e3dc1b274ff47a844fb0b29e
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Tue Dec 17 20:06:04 2019 +0100

    platform/x86: hp-wmi: Make buffer for HPWMI_FEATURE2_QUERY 128 bytes
    
    commit 133b2acee3871ae6bf123b8fe34be14464aa3d2c upstream.
    
    At least on the HP Envy x360 15-cp0xxx model the WMI interface
    for HPWMI_FEATURE2_QUERY requires an outsize of at least 128 bytes,
    otherwise it fails with an error code 5 (HPWMI_RET_INVALID_PARAMETERS):
    
    Dec 06 00:59:38 kernel: hp_wmi: query 0xd returned error 0x5
    
    We do not care about the contents of the buffer, we just want to know
    if the HPWMI_FEATURE2_QUERY command is supported.
    
    This commits bumps the buffer size, fixing the error.
    
    Fixes: 8a1513b4932 ("hp-wmi: limit hotkey enable")
    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1520703
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 9a6c2819cb43b3844ccddb009b92b6350973ca0f
Author: Florian Westphal <fw@strlen.de>
Date:   Sun Dec 15 03:49:25 2019 +0100

    netfilter: ebtables: compat: reject all padding in matches/watchers
    
    commit e608f631f0ba5f1fc5ee2e260a3a35d13107cbfe upstream.
    
    syzbot reported following splat:
    
    BUG: KASAN: vmalloc-out-of-bounds in size_entry_mwt net/bridge/netfilter/ebtables.c:2063 [inline]
    BUG: KASAN: vmalloc-out-of-bounds in compat_copy_entries+0x128b/0x1380 net/bridge/netfilter/ebtables.c:2155
    Read of size 4 at addr ffffc900004461f4 by task syz-executor267/7937
    
    CPU: 1 PID: 7937 Comm: syz-executor267 Not tainted 5.5.0-rc1-syzkaller #0
     size_entry_mwt net/bridge/netfilter/ebtables.c:2063 [inline]
     compat_copy_entries+0x128b/0x1380 net/bridge/netfilter/ebtables.c:2155
     compat_do_replace+0x344/0x720 net/bridge/netfilter/ebtables.c:2249
     compat_do_ebt_set_ctl+0x22f/0x27e net/bridge/netfilter/ebtables.c:2333
     [..]
    
    Because padding isn't considered during computation of ->buf_user_offset,
    "total" is decremented by fewer bytes than it should.
    
    Therefore, the first part of
    
    if (*total < sizeof(*entry) || entry->next_offset < sizeof(*entry))
    
    will pass, -- it should not have.  This causes oob access:
    entry->next_offset is past the vmalloced size.
    
    Reject padding and check that computed user offset (sum of ebt_entry
    structure plus all individual matches/watchers/targets) is same
    value that userspace gave us as the offset of the next entry.
    
    Reported-by: syzbot+f68108fed972453a0ad4@syzkaller.appspotmail.com
    Fixes: 81e675c227ec ("netfilter: ebtables: add CONFIG_COMPAT support")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d05be1d7c02a24e27966218e796fe024922dcfec
Author: Florian Westphal <fw@strlen.de>
Date:   Mon Feb 19 01:24:53 2018 +0100

    netfilter: ebtables: convert BUG_ONs to WARN_ONs
    
    commit fc6a5d0601c5ac1d02f283a46f60b87b2033e5ca upstream.
    
    All of these conditions are not fatal and should have
    been WARN_ONs from the get-go.
    
    Convert them to WARN_ONs and bail out.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a8e72340fb0df2d61b867776e816438f85b6afce
Author: Jose Abreu <Jose.Abreu@synopsys.com>
Date:   Wed Dec 18 11:17:42 2019 +0100

    net: stmmac: Enable 16KB buffer size
    
    commit b2f3a481c4cd62f78391b836b64c0a6e72b503d2 upstream.
    
    XGMAC supports maximum MTU that can go to 16KB. Lets add this check in
    the calculation of RX buffer size.
    
    Fixes: 7ac6653a085b ("stmmac: Move the STMicroelectronics driver")
    Signed-off-by: Jose Abreu <Jose.Abreu@synopsys.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7f9ba6bb9e65a84e5086a7f2885239f5852dff4f
Author: Jose Abreu <Jose.Abreu@synopsys.com>
Date:   Wed Dec 18 11:17:41 2019 +0100

    net: stmmac: 16KB buffer must be 16 byte aligned
    
    commit 8605131747e7e1fd8f6c9f97a00287aae2b2c640 upstream.
    
    The 16KB RX Buffer must also be 16 byte aligned. Fix it.
    
    Fixes: 7ac6653a085b ("stmmac: Move the STMicroelectronics driver")
    Signed-off-by: Jose Abreu <Jose.Abreu@synopsys.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 921eccd0065ef7d371ac3c906178d7c4e8684a32
Author: Jim Mattson <jmattson@google.com>
Date:   Fri Dec 13 16:15:15 2019 -0800

    kvm: x86: Host feature SSBD doesn't imply guest feature SPEC_CTRL_SSBD
    
    commit 396d2e878f92ec108e4293f1c77ea3bc90b414ff upstream.
    
    The host reports support for the synthetic feature X86_FEATURE_SSBD
    when any of the three following hardware features are set:
      CPUID.(EAX=7,ECX=0):EDX.SSBD[bit 31]
      CPUID.80000008H:EBX.AMD_SSBD[bit 24]
      CPUID.80000008H:EBX.VIRT_SSBD[bit 25]
    
    Either of the first two hardware features implies the existence of the
    IA32_SPEC_CTRL MSR, but CPUID.80000008H:EBX.VIRT_SSBD[bit 25] does
    not. Therefore, CPUID.(EAX=7,ECX=0):EDX.SSBD[bit 31] should only be
    set in the guest if CPUID.(EAX=7,ECX=0):EDX.SSBD[bit 31] or
    CPUID.80000008H:EBX.AMD_SSBD[bit 24] is set on the host.
    
    Fixes: 0c54914d0c52a ("KVM: x86: use Intel speculation bugs and features as derived in generic x86 code")
    Signed-off-by: Jim Mattson <jmattson@google.com>
    Reviewed-by: Jacob Xu <jacobhxu@google.com>
    Reviewed-by: Peter Shier <pshier@google.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Reported-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    [bwh: Backported to 3.16: adjust indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5678819c001376cc533b9bf94bab52f040de57e8
Author: Suwan Kim <suwan.kim027@gmail.com>
Date:   Fri Dec 13 11:30:55 2019 +0900

    usbip: Fix error path of vhci_recv_ret_submit()
    
    commit aabb5b833872524eaf28f52187e5987984982264 upstream.
    
    If a transaction error happens in vhci_recv_ret_submit(), event
    handler closes connection and changes port status to kick hub_event.
    Then hub tries to flush the endpoint URBs, but that causes infinite
    loop between usb_hub_flush_endpoint() and vhci_urb_dequeue() because
    "vhci_priv" in vhci_urb_dequeue() was already released by
    vhci_recv_ret_submit() before a transmission error occurred. Thus,
    vhci_urb_dequeue() terminates early and usb_hub_flush_endpoint()
    continuously calls vhci_urb_dequeue().
    
    The root cause of this issue is that vhci_recv_ret_submit()
    terminates early without giving back URB when transaction error
    occurs in vhci_recv_ret_submit(). That causes the error URB to still
    be linked at endpoint list without “vhci_priv".
    
    So, in the case of transaction error in vhci_recv_ret_submit(),
    unlink URB from the endpoint, insert proper error code in
    urb->status and give back URB.
    
    Reported-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
    Tested-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
    Signed-off-by: Suwan Kim <suwan.kim027@gmail.com>
    Acked-by: Shuah Khan <skhan@linuxfoundation.org>
    Link: https://lore.kernel.org/r/20191213023055.19933-3-suwan.kim027@gmail.com
    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 6d64e68be54ead844232cf82cc2a2863c0a823c1
Author: Erkka Talvitie <erkka.talvitie@vincit.fi>
Date:   Wed Dec 11 10:08:39 2019 +0200

    USB: EHCI: Do not return -EPIPE when hub is disconnected
    
    commit 64cc3f12d1c7dd054a215bc1ff9cc2abcfe35832 upstream.
    
    When disconnecting a USB hub that has some child device(s) connected to it
    (such as a USB mouse), then the stack tries to clear halt and
    reset device(s) which are _already_ physically disconnected.
    
    The issue has been reproduced with:
    
    CPU: IMX6D5EYM10AD or MCIMX6D5EYM10AE.
    SW: U-Boot 2019.07 and kernel 4.19.40.
    
    CPU: HP Proliant Microserver Gen8.
    SW: Linux version 4.2.3-300.fc23.x86_64
    
    In this situation there will be error bit for MMF active yet the
    CERR equals EHCI_TUNE_CERR + halt. Existing implementation
    interprets this as a stall [1] (chapter 8.4.5).
    
    The possible conditions when the MMF will be active + halt
    can be found from [2] (Table 4-13).
    
    Fix for the issue is to check whether MMF is active and PID Code is
    IN before checking for the stall. If these conditions are true then
    it is not a stall.
    
    What happens after the fix is that when disconnecting a hub with
    attached device(s) the situation is not interpret as a stall.
    
    [1] [https://www.usb.org/document-library/usb-20-specification, usb_20.pdf]
    [2] [https://www.intel.com/content/dam/www/public/us/en/documents/
         technical-specifications/ehci-specification-for-usb.pdf]
    
    Signed-off-by: Erkka Talvitie <erkka.talvitie@vincit.fi>
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/ef70941d5f349767f19c0ed26b0dd9eed8ad81bb.1576050523.git.erkka.talvitie@vincit.fi
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 99b8a79e04d6d660e2d680722dc94e33bd188571
Author: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Date:   Thu Dec 12 13:16:02 2019 +0000

    tty: link tty and port before configuring it as console
    
    commit fb2b90014d782d80d7ebf663e50f96d8c507a73c upstream.
    
    There seems to be a race condition in tty drivers and I could see on
    many boot cycles a NULL pointer dereference as tty_init_dev() tries to
    do 'tty->port->itty = tty' even though tty->port is NULL.
    'tty->port' will be set by the driver and if the driver has not yet done
    it before we open the tty device we can get to this situation. By adding
    some extra debug prints, I noticed that:
    
    6.650130: uart_add_one_port
    6.663849: register_console
    6.664846: tty_open
    6.674391: tty_init_dev
    6.675456: tty_port_link_device
    
    uart_add_one_port() registers the console, as soon as it registers, the
    userspace tries to use it and that leads to tty_open() but
    uart_add_one_port() has not yet done tty_port_link_device() and so
    tty->port is not yet configured when control reaches tty_init_dev().
    
    Further look into the code and tty_port_link_device() is done by
    uart_add_one_port(). After registering the console uart_add_one_port()
    will call tty_port_register_device_attr_serdev() and
    tty_port_link_device() is called from this.
    
    Call add tty_port_link_device() before uart_configure_port() is done and
    add a check in tty_port_link_device() so that it only links the port if
    it has not been done yet.
    
    Suggested-by: Jiri Slaby <jslaby@suse.com>
    Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Link: https://lore.kernel.org/r/20191212131602.29504-1-sudipm.mukherjee@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3c6879d121ebe0886f22233e284af5fadfb15048
Author: Shengjiu Wang <shengjiu.wang@nxp.com>
Date:   Wed Dec 11 19:57:22 2019 +0800

    ASoC: wm8962: fix lambda value
    
    commit 556672d75ff486e0b6786056da624131679e0576 upstream.
    
    According to user manual, it is required that FLL_LAMBDA > 0
    in all cases (Integer and Franctional modes).
    
    Fixes: 9a76f1ff6e29 ("ASoC: Add initial WM8962 CODEC driver")
    Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
    Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Link: https://lore.kernel.org/r/1576065442-19763-1-git-send-email-shengjiu.wang@nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e3497b5bb6b691199574803a9dfe66f2efdde1b9
Author: Takashi Iwai <tiwai@suse.de>
Date:   Fri Dec 13 09:51:10 2019 +0100

    ALSA: hda/ca0132 - Avoid endless loop
    
    commit cb04fc3b6b076f67d228a0b7d096c69ad486c09c upstream.
    
    Introduce a timeout to dspio_clear_response_queue() so that it won't
    be caught in an endless loop even if the hardware doesn't respond
    properly.
    
    Fixes: a73d511c4867 ("ALSA: hda/ca0132: Add unsol handler for DSP and jack detection")
    Link: https://lore.kernel.org/r/20191213085111.22855-3-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8cbf7041a3cdda1dae702e9ebdc5d801da6b56d9
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Dec 11 16:57:42 2019 +0100

    ALSA: pcm: Avoid possible info leaks from PCM stream buffers
    
    commit add9d56d7b3781532208afbff5509d7382fb6efe upstream.
    
    The current PCM code doesn't initialize explicitly the buffers
    allocated for PCM streams, hence it might leak some uninitialized
    kernel data or previous stream contents by mmapping or reading the
    buffer before actually starting the stream.
    
    Since this is a common problem, this patch simply adds the clearance
    of the buffer data at hw_params callback.  Although this does only
    zero-clear no matter which format is used, which doesn't mean the
    silence for some formats, but it should be OK because the intention is
    just to clear the previous data on the buffer.
    
    Reported-by: Lionel Koenig <lionel.koenig@gmail.com>
    Link: https://lore.kernel.org/r/20191211155742.3213-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 31e74b7d1ae5fead4bf524413aa16055208c5e14
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Dec 12 12:55:29 2019 -0800

    tcp: do not send empty skb from tcp_write_xmit()
    
    commit 1f85e6267caca44b30c54711652b0726fadbb131 upstream.
    
    Backport of commit fdfc5c8594c2 ("tcp: remove empty skb from
    write queue in error cases") in linux-4.14 stable triggered
    various bugs. One of them has been fixed in commit ba2ddb43f270
    ("tcp: Don't dequeue SYN/FIN-segments from write-queue"), but
    we still have crashes in some occasions.
    
    Root-cause is that when tcp_sendmsg() has allocated a fresh
    skb and could not append a fragment before being blocked
    in sk_stream_wait_memory(), tcp_write_xmit() might be called
    and decide to send this fresh and empty skb.
    
    Sending an empty packet is not only silly, it might have caused
    many issues we had in the past with tp->packets_out being
    out of sync.
    
    Fixes: c65f7f00c587 ("[TCP]: Simplify SKB data portion allocation with NETIF_F_SG.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Christoph Paasch <cpaasch@apple.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Cc: Jason Baron <jbaron@akamai.com>
    Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
    Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3c32e1a8b7ea89ca1831d883cd6b9df447f42be7
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Dec 12 10:32:13 2019 -0800

    6pack,mkiss: fix possible deadlock
    
    commit 5c9934b6767b16ba60be22ec3cbd4379ad64170d upstream.
    
    We got another syzbot report [1] that tells us we must use
    write_lock_irq()/write_unlock_irq() to avoid possible deadlock.
    
    [1]
    
    WARNING: inconsistent lock state
    5.5.0-rc1-syzkaller #0 Not tainted
    --------------------------------
    inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-R} usage.
    syz-executor826/9605 [HC1[1]:SC0[0]:HE0:SE1] takes:
    ffffffff8a128718 (disc_data_lock){+-..}, at: sp_get.isra.0+0x1d/0xf0 drivers/net/ppp/ppp_synctty.c:138
    {HARDIRQ-ON-W} state was registered at:
      lock_acquire+0x190/0x410 kernel/locking/lockdep.c:4485
      __raw_write_lock_bh include/linux/rwlock_api_smp.h:203 [inline]
      _raw_write_lock_bh+0x33/0x50 kernel/locking/spinlock.c:319
      sixpack_close+0x1d/0x250 drivers/net/hamradio/6pack.c:657
      tty_ldisc_close.isra.0+0x119/0x1a0 drivers/tty/tty_ldisc.c:489
      tty_set_ldisc+0x230/0x6b0 drivers/tty/tty_ldisc.c:585
      tiocsetd drivers/tty/tty_io.c:2337 [inline]
      tty_ioctl+0xe8d/0x14f0 drivers/tty/tty_io.c:2597
      vfs_ioctl fs/ioctl.c:47 [inline]
      file_ioctl fs/ioctl.c:545 [inline]
      do_vfs_ioctl+0x977/0x14e0 fs/ioctl.c:732
      ksys_ioctl+0xab/0xd0 fs/ioctl.c:749
      __do_sys_ioctl fs/ioctl.c:756 [inline]
      __se_sys_ioctl fs/ioctl.c:754 [inline]
      __x64_sys_ioctl+0x73/0xb0 fs/ioctl.c:754
      do_syscall_64+0xfa/0x790 arch/x86/entry/common.c:294
      entry_SYSCALL_64_after_hwframe+0x49/0xbe
    irq event stamp: 3946
    hardirqs last  enabled at (3945): [<ffffffff87c86e43>] __raw_spin_unlock_irq include/linux/spinlock_api_smp.h:168 [inline]
    hardirqs last  enabled at (3945): [<ffffffff87c86e43>] _raw_spin_unlock_irq+0x23/0x80 kernel/locking/spinlock.c:199
    hardirqs last disabled at (3946): [<ffffffff8100675f>] trace_hardirqs_off_thunk+0x1a/0x1c arch/x86/entry/thunk_64.S:42
    softirqs last  enabled at (2658): [<ffffffff86a8b4df>] spin_unlock_bh include/linux/spinlock.h:383 [inline]
    softirqs last  enabled at (2658): [<ffffffff86a8b4df>] clusterip_netdev_event+0x46f/0x670 net/ipv4/netfilter/ipt_CLUSTERIP.c:222
    softirqs last disabled at (2656): [<ffffffff86a8b22b>] spin_lock_bh include/linux/spinlock.h:343 [inline]
    softirqs last disabled at (2656): [<ffffffff86a8b22b>] clusterip_netdev_event+0x1bb/0x670 net/ipv4/netfilter/ipt_CLUSTERIP.c:196
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
    
           CPU0
           ----
      lock(disc_data_lock);
      <Interrupt>
        lock(disc_data_lock);
    
     *** DEADLOCK ***
    
    5 locks held by syz-executor826/9605:
     #0: ffff8880a905e198 (&tty->legacy_mutex){+.+.}, at: tty_lock+0xc7/0x130 drivers/tty/tty_mutex.c:19
     #1: ffffffff899a56c0 (rcu_read_lock){....}, at: mutex_spin_on_owner+0x0/0x330 kernel/locking/mutex.c:413
     #2: ffff8880a496a2b0 (&(&i->lock)->rlock){-.-.}, at: spin_lock include/linux/spinlock.h:338 [inline]
     #2: ffff8880a496a2b0 (&(&i->lock)->rlock){-.-.}, at: serial8250_interrupt+0x2d/0x1a0 drivers/tty/serial/8250/8250_core.c:116
     #3: ffffffff8c104048 (&port_lock_key){-.-.}, at: serial8250_handle_irq.part.0+0x24/0x330 drivers/tty/serial/8250/8250_port.c:1823
     #4: ffff8880a905e090 (&tty->ldisc_sem){++++}, at: tty_ldisc_ref+0x22/0x90 drivers/tty/tty_ldisc.c:288
    
    stack backtrace:
    CPU: 1 PID: 9605 Comm: syz-executor826 Not tainted 5.5.0-rc1-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Call Trace:
     <IRQ>
     __dump_stack lib/dump_stack.c:77 [inline]
     dump_stack+0x197/0x210 lib/dump_stack.c:118
     print_usage_bug.cold+0x327/0x378 kernel/locking/lockdep.c:3101
     valid_state kernel/locking/lockdep.c:3112 [inline]
     mark_lock_irq kernel/locking/lockdep.c:3309 [inline]
     mark_lock+0xbb4/0x1220 kernel/locking/lockdep.c:3666
     mark_usage kernel/locking/lockdep.c:3554 [inline]
     __lock_acquire+0x1e55/0x4a00 kernel/locking/lockdep.c:3909
     lock_acquire+0x190/0x410 kernel/locking/lockdep.c:4485
     __raw_read_lock include/linux/rwlock_api_smp.h:149 [inline]
     _raw_read_lock+0x32/0x50 kernel/locking/spinlock.c:223
     sp_get.isra.0+0x1d/0xf0 drivers/net/ppp/ppp_synctty.c:138
     sixpack_write_wakeup+0x25/0x340 drivers/net/hamradio/6pack.c:402
     tty_wakeup+0xe9/0x120 drivers/tty/tty_io.c:536
     tty_port_default_wakeup+0x2b/0x40 drivers/tty/tty_port.c:50
     tty_port_tty_wakeup+0x57/0x70 drivers/tty/tty_port.c:387
     uart_write_wakeup+0x46/0x70 drivers/tty/serial/serial_core.c:104
     serial8250_tx_chars+0x495/0xaf0 drivers/tty/serial/8250/8250_port.c:1761
     serial8250_handle_irq.part.0+0x2a2/0x330 drivers/tty/serial/8250/8250_port.c:1834
     serial8250_handle_irq drivers/tty/serial/8250/8250_port.c:1820 [inline]
     serial8250_default_handle_irq+0xc0/0x150 drivers/tty/serial/8250/8250_port.c:1850
     serial8250_interrupt+0xf1/0x1a0 drivers/tty/serial/8250/8250_core.c:126
     __handle_irq_event_percpu+0x15d/0x970 kernel/irq/handle.c:149
     handle_irq_event_percpu+0x74/0x160 kernel/irq/handle.c:189
     handle_irq_event+0xa7/0x134 kernel/irq/handle.c:206
     handle_edge_irq+0x25e/0x8d0 kernel/irq/chip.c:830
     generic_handle_irq_desc include/linux/irqdesc.h:156 [inline]
     do_IRQ+0xde/0x280 arch/x86/kernel/irq.c:250
     common_interrupt+0xf/0xf arch/x86/entry/entry_64.S:607
     </IRQ>
    RIP: 0010:cpu_relax arch/x86/include/asm/processor.h:685 [inline]
    RIP: 0010:mutex_spin_on_owner+0x247/0x330 kernel/locking/mutex.c:579
    Code: c3 be 08 00 00 00 4c 89 e7 e8 e5 06 59 00 4c 89 e0 48 c1 e8 03 42 80 3c 38 00 0f 85 e1 00 00 00 49 8b 04 24 a8 01 75 96 f3 90 <e9> 2f fe ff ff 0f 0b e8 0d 19 09 00 84 c0 0f 85 ff fd ff ff 48 c7
    RSP: 0018:ffffc90001eafa20 EFLAGS: 00000246 ORIG_RAX: ffffffffffffffd7
    RAX: 0000000000000000 RBX: ffff88809fd9e0c0 RCX: 1ffffffff13266dd
    RDX: 0000000000000000 RSI: 0000000000000008 RDI: 0000000000000000
    RBP: ffffc90001eafa60 R08: 1ffff11013d22898 R09: ffffed1013d22899
    R10: ffffed1013d22898 R11: ffff88809e9144c7 R12: ffff8880a905e138
    R13: ffff88809e9144c0 R14: 0000000000000000 R15: dffffc0000000000
     mutex_optimistic_spin kernel/locking/mutex.c:673 [inline]
     __mutex_lock_common kernel/locking/mutex.c:962 [inline]
     __mutex_lock+0x32b/0x13c0 kernel/locking/mutex.c:1106
     mutex_lock_nested+0x16/0x20 kernel/locking/mutex.c:1121
     tty_lock+0xc7/0x130 drivers/tty/tty_mutex.c:19
     tty_release+0xb5/0xe90 drivers/tty/tty_io.c:1665
     __fput+0x2ff/0x890 fs/file_table.c:280
     ____fput+0x16/0x20 fs/file_table.c:313
     task_work_run+0x145/0x1c0 kernel/task_work.c:113
     exit_task_work include/linux/task_work.h:22 [inline]
     do_exit+0x8e7/0x2ef0 kernel/exit.c:797
     do_group_exit+0x135/0x360 kernel/exit.c:895
     __do_sys_exit_group kernel/exit.c:906 [inline]
     __se_sys_exit_group kernel/exit.c:904 [inline]
     __x64_sys_exit_group+0x44/0x50 kernel/exit.c:904
     do_syscall_64+0xfa/0x790 arch/x86/entry/common.c:294
     entry_SYSCALL_64_after_hwframe+0x49/0xbe
    RIP: 0033:0x43fef8
    Code: Bad RIP value.
    RSP: 002b:00007ffdb07d2338 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 000000000043fef8
    RDX: 0000000000000000 RSI: 000000000000003c RDI: 0000000000000000
    RBP: 00000000004bf730 R08: 00000000000000e7 R09: ffffffffffffffd0
    R10: 00000000004002c8 R11: 0000000000000246 R12: 0000000000000001
    R13: 00000000006d1180 R14: 0000000000000000 R15: 0000000000000000
    
    Fixes: 6e4e2f811bad ("6pack,mkiss: fix lock inconsistency")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 749bb6d97c41a43a00205f0e37b08aede3ed23b6
Author: Christophe Leroy <christophe.leroy@c-s.fr>
Date:   Mon Dec 9 06:19:08 2019 +0000

    powerpc/irq: fix stack overflow verification
    
    commit 099bc4812f09155da77eeb960a983470249c9ce1 upstream.
    
    Before commit 0366a1c70b89 ("powerpc/irq: Run softirqs off the top of
    the irq stack"), check_stack_overflow() was called by do_IRQ(), before
    switching to the irq stack.
    In that commit, do_IRQ() was renamed __do_irq(), and is now executing
    on the irq stack, so check_stack_overflow() has just become almost
    useless.
    
    Move check_stack_overflow() call in do_IRQ() to do the check while
    still on the current stack.
    
    Fixes: 0366a1c70b89 ("powerpc/irq: Run softirqs off the top of the irq stack")
    Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/e033aa8116ab12b7ca9a9c75189ad0741e3b9b5f.1575872340.git.christophe.leroy@c-s.fr
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 29f18582b8db7453e361ac2e23e1a76cc0289b5b
Author: Jan Kara <jack@suse.cz>
Date:   Mon Dec 2 18:02:13 2019 +0100

    ext4: check for directory entries too close to block end
    
    commit 109ba779d6cca2d519c5dd624a3276d03e21948e upstream.
    
    ext4_check_dir_entry() currently does not catch a case when a directory
    entry ends so close to the block end that the header of the next
    directory entry would not fit in the remaining space. This can lead to
    directory iteration code trying to access address beyond end of current
    buffer head leading to oops.
    
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20191202170213.4761-3-jack@suse.cz
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e64c9669a471bc276fbe5c468d6d611dd8991d0a
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Fri Jan 10 11:11:24 2020 -0500

    btrfs: check rw_devices, not num_devices for balance
    
    commit b35cf1f0bf1f2b0b193093338414b9bd63b29015 upstream.
    
    The fstest btrfs/154 reports
    
      [ 8675.381709] BTRFS: Transaction aborted (error -28)
      [ 8675.383302] WARNING: CPU: 1 PID: 31900 at fs/btrfs/block-group.c:2038 btrfs_create_pending_block_groups+0x1e0/0x1f0 [btrfs]
      [ 8675.390925] CPU: 1 PID: 31900 Comm: btrfs Not tainted 5.5.0-rc6-default+ #935
      [ 8675.392780] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-59-gc9ba527-rebuilt.opensuse.org 04/01/2014
      [ 8675.395452] RIP: 0010:btrfs_create_pending_block_groups+0x1e0/0x1f0 [btrfs]
      [ 8675.402672] RSP: 0018:ffffb2090888fb00 EFLAGS: 00010286
      [ 8675.404413] RAX: 0000000000000000 RBX: ffff92026dfa91c8 RCX: 0000000000000001
      [ 8675.406609] RDX: 0000000000000000 RSI: ffffffff8e100899 RDI: ffffffff8e100971
      [ 8675.408775] RBP: ffff920247c61660 R08: 0000000000000000 R09: 0000000000000000
      [ 8675.410978] R10: 0000000000000000 R11: 0000000000000000 R12: 00000000ffffffe4
      [ 8675.412647] R13: ffff92026db74000 R14: ffff920247c616b8 R15: ffff92026dfbc000
      [ 8675.413994] FS:  00007fd5e57248c0(0000) GS:ffff92027d800000(0000) knlGS:0000000000000000
      [ 8675.416146] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [ 8675.417833] CR2: 0000564aa51682d8 CR3: 000000006dcbc004 CR4: 0000000000160ee0
      [ 8675.419801] Call Trace:
      [ 8675.420742]  btrfs_start_dirty_block_groups+0x355/0x480 [btrfs]
      [ 8675.422600]  btrfs_commit_transaction+0xc8/0xaf0 [btrfs]
      [ 8675.424335]  reset_balance_state+0x14a/0x190 [btrfs]
      [ 8675.425824]  btrfs_balance.cold+0xe7/0x154 [btrfs]
      [ 8675.427313]  ? kmem_cache_alloc_trace+0x235/0x2c0
      [ 8675.428663]  btrfs_ioctl_balance+0x298/0x350 [btrfs]
      [ 8675.430285]  btrfs_ioctl+0x466/0x2550 [btrfs]
      [ 8675.431788]  ? mem_cgroup_charge_statistics+0x51/0xf0
      [ 8675.433487]  ? mem_cgroup_commit_charge+0x56/0x400
      [ 8675.435122]  ? do_raw_spin_unlock+0x4b/0xc0
      [ 8675.436618]  ? _raw_spin_unlock+0x1f/0x30
      [ 8675.438093]  ? __handle_mm_fault+0x499/0x740
      [ 8675.439619]  ? do_vfs_ioctl+0x56e/0x770
      [ 8675.441034]  do_vfs_ioctl+0x56e/0x770
      [ 8675.442411]  ksys_ioctl+0x3a/0x70
      [ 8675.443718]  ? trace_hardirqs_off_thunk+0x1a/0x1c
      [ 8675.445333]  __x64_sys_ioctl+0x16/0x20
      [ 8675.446705]  do_syscall_64+0x50/0x210
      [ 8675.448059]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
      [ 8675.479187] BTRFS: error (device vdb) in btrfs_create_pending_block_groups:2038: errno=-28 No space left
    
    We now use btrfs_can_overcommit() to see if we can flip a block group
    read only.  Before this would fail because we weren't taking into
    account the usable un-allocated space for allocating chunks.  With my
    patches we were allowed to do the balance, which is technically correct.
    
    The test is trying to start balance on degraded mount.  So now we're
    trying to allocate a chunk and cannot because we want to allocate a
    RAID1 chunk, but there's only 1 device that's available for usage.  This
    results in an ENOSPC.
    
    But we shouldn't even be making it this far, we don't have enough
    devices to restripe.  The problem is we're using btrfs_num_devices(),
    that also includes missing devices. That's not actually what we want, we
    need to use rw_devices.
    
    The chunk_mutex is not needed here, rw_devices changes only in device
    add, remove or replace, all are excluded by EXCL_OP mechanism.
    
    Fixes: e4d8ec0f65b9 ("Btrfs: implement online profile changing")
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    [ add stacktrace, update changelog, drop chunk_mutex ]
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 81ead8db7b30e6c60f542d66a782d77b35ae8b77
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Wed Dec 18 17:20:29 2019 -0500

    btrfs: do not delete mismatched root refs
    
    commit 423a716cd7be16fb08690760691befe3be97d3fc upstream.
    
    btrfs_del_root_ref() will simply WARN_ON() if the ref doesn't match in
    any way, and then continue to delete the reference.  This shouldn't
    happen, we have these values because there's more to the reference than
    the original root and the sub root.  If any of these checks fail, return
    -ENOENT.
    
    Signed-off-by: Josef Bacik <josef@toxicpanda.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 ce79733c2614cea213be581d1dda8485eccc8acf
Author: Lu Fengqi <lufq.fnst@cn.fujitsu.com>
Date:   Wed Aug 1 11:32:31 2018 +0800

    btrfs: Remove redundant btrfs_release_path from btrfs_unlink_subvol
    
    commit 5b7d687ad5913a56b6a8788435d7a53990b4176d upstream.
    
    Although it is safe to call this on already released paths with no locks
    held or extent buffers, removing the redundant btrfs_release_path is
    reasonable.
    
    Signed-off-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 3.16 as dependency of commit d49d3287e74f
     "btrfs: fix invalid removal of root ref"]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 62bcfd5e5316f81e6c3f273443df4d89ee6d3e78
Author: Filipe Manana <fdmanana@suse.com>
Date:   Wed Dec 11 09:01:40 2019 +0000

    Btrfs: fix infinite loop during nocow writeback due to race
    
    commit de7999afedff02c6631feab3ea726a0e8f8c3d40 upstream.
    
    When starting writeback for a range that covers part of a preallocated
    extent, due to a race with writeback for another range that also covers
    another part of the same preallocated extent, we can end up in an infinite
    loop.
    
    Consider the following example where for inode 280 we have two dirty
    ranges:
    
      range A, from 294912 to 303103, 8192 bytes
      range B, from 348160 to 438271, 90112 bytes
    
    and we have the following file extent item layout for our inode:
    
      leaf 38895616 gen 24544 total ptrs 29 free space 13820 owner 5
          (...)
          item 27 key (280 108 200704) itemoff 14598 itemsize 53
              extent data disk bytenr 0 nr 0 type 1 (regular)
              extent data offset 0 nr 94208 ram 94208
          item 28 key (280 108 294912) itemoff 14545 itemsize 53
              extent data disk bytenr 10433052672 nr 81920 type 2 (prealloc)
              extent data offset 0 nr 81920 ram 81920
    
    Then the following happens:
    
    1) Writeback starts for range B (from 348160 to 438271), execution of
       run_delalloc_nocow() starts;
    
    2) The first iteration of run_delalloc_nocow()'s whil loop leaves us at
       the extent item at slot 28, pointing to the prealloc extent item
       covering the range from 294912 to 376831. This extent covers part of
       our range;
    
    3) An ordered extent is created against that extent, covering the file
       range from 348160 to 376831 (28672 bytes);
    
    4) We adjust 'cur_offset' to 376832 and move on to the next iteration of
       the while loop;
    
    5) The call to btrfs_lookup_file_extent() leaves us at the same leaf,
       pointing to slot 29, 1 slot after the last item (the extent item
       we processed in the previous iteration);
    
    6) Because we are a slot beyond the last item, we call btrfs_next_leaf(),
       which releases the search path before doing a another search for the
       last key of the leaf (280 108 294912);
    
    7) Right after btrfs_next_leaf() released the path, and before it did
       another search for the last key of the leaf, writeback for the range
       A (from 294912 to 303103) completes (it was previously started at
       some point);
    
    8) Upon completion of the ordered extent for range A, the prealloc extent
       we previously found got split into two extent items, one covering the
       range from 294912 to 303103 (8192 bytes), with a type of regular extent
       (and no longer prealloc) and another covering the range from 303104 to
       376831 (73728 bytes), with a type of prealloc and an offset of 8192
       bytes. So our leaf now has the following layout:
    
         leaf 38895616 gen 24544 total ptrs 31 free space 13664 owner 5
             (...)
             item 27 key (280 108 200704) itemoff 14598 itemsize 53
                 extent data disk bytenr 0 nr 0 type 1
                 extent data offset 0 nr 8192 ram 94208
             item 28 key (280 108 208896) itemoff 14545 itemsize 53
                 extent data disk bytenr 10433142784 nr 86016 type 1
                 extent data offset 0 nr 86016 ram 86016
             item 29 key (280 108 294912) itemoff 14492 itemsize 53
                 extent data disk bytenr 10433052672 nr 81920 type 1
                 extent data offset 0 nr 8192 ram 81920
             item 30 key (280 108 303104) itemoff 14439 itemsize 53
                 extent data disk bytenr 10433052672 nr 81920 type 2
                 extent data offset 8192 nr 73728 ram 81920
    
    9) After btrfs_next_leaf() returns, we have our path pointing to that same
       leaf and at slot 30, since it has a key we didn't have before and it's
       the first key greater then the key that was previously the last key of
       the leaf (key (280 108 294912));
    
    10) The extent item at slot 30 covers the range from 303104 to 376831
        which is in our target range, so we process it, despite having already
        created an ordered extent against this extent for the file range from
        348160 to 376831. This is because we skip to the next extent item only
        if its end is less than or equals to the start of our delalloc range,
        and not less than or equals to the current offset ('cur_offset');
    
    11) As a result we compute 'num_bytes' as:
    
        num_bytes = min(end + 1, extent_end) - cur_offset;
                  = min(438271 + 1, 376832) - 376832 = 0
    
    12) We then call create_io_em() for a 0 bytes range starting at offset
        376832;
    
    13) Then create_io_em() enters an infinite loop because its calls to
        btrfs_drop_extent_cache() do nothing due to the 0 length range
        passed to it. So no existing extent maps that cover the offset
        376832 get removed, and therefore calls to add_extent_mapping()
        return -EEXIST, resulting in an infinite loop. This loop from
        create_io_em() is the following:
    
        do {
            btrfs_drop_extent_cache(BTRFS_I(inode), em->start,
                                    em->start + em->len - 1, 0);
            write_lock(&em_tree->lock);
            ret = add_extent_mapping(em_tree, em, 1);
            write_unlock(&em_tree->lock);
            /*
             * The caller has taken lock_extent(), who could race with us
             * to add em?
             */
        } while (ret == -EEXIST);
    
    Also, each call to btrfs_drop_extent_cache() triggers a warning because
    the start offset passed to it (376832) is smaller then the end offset
    (376832 - 1) passed to it by -1, due to the 0 length:
    
      [258532.052621] ------------[ cut here ]------------
      [258532.052643] WARNING: CPU: 0 PID: 9987 at fs/btrfs/file.c:602 btrfs_drop_extent_cache+0x3f4/0x590 [btrfs]
      (...)
      [258532.052672] CPU: 0 PID: 9987 Comm: fsx Tainted: G        W         5.4.0-rc7-btrfs-next-64 #1
      [258532.052673] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-0-ga698c8995f-prebuilt.qemu.org 04/01/2014
      [258532.052691] RIP: 0010:btrfs_drop_extent_cache+0x3f4/0x590 [btrfs]
      (...)
      [258532.052695] RSP: 0018:ffffb4be0153f860 EFLAGS: 00010287
      [258532.052700] RAX: ffff975b445ee360 RBX: ffff975b44eb3e08 RCX: 0000000000000000
      [258532.052700] RDX: 0000000000038fff RSI: 0000000000039000 RDI: ffff975b445ee308
      [258532.052700] RBP: 0000000000038fff R08: 0000000000000000 R09: 0000000000000001
      [258532.052701] R10: ffff975b513c5c10 R11: 00000000e3c0cfa9 R12: 0000000000039000
      [258532.052703] R13: ffff975b445ee360 R14: 00000000ffffffef R15: ffff975b445ee308
      [258532.052705] FS:  00007f86a821de80(0000) GS:ffff975b76a00000(0000) knlGS:0000000000000000
      [258532.052707] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [258532.052708] CR2: 00007fdacf0f3ab4 CR3: 00000001f9d26002 CR4: 00000000003606f0
      [258532.052712] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [258532.052717] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [258532.052717] Call Trace:
      [258532.052718]  ? preempt_schedule_common+0x32/0x70
      [258532.052722]  ? ___preempt_schedule+0x16/0x20
      [258532.052741]  create_io_em+0xff/0x180 [btrfs]
      [258532.052767]  run_delalloc_nocow+0x942/0xb10 [btrfs]
      [258532.052791]  btrfs_run_delalloc_range+0x30b/0x520 [btrfs]
      [258532.052812]  ? find_lock_delalloc_range+0x221/0x250 [btrfs]
      [258532.052834]  writepage_delalloc+0xe4/0x140 [btrfs]
      [258532.052855]  __extent_writepage+0x110/0x4e0 [btrfs]
      [258532.052876]  extent_write_cache_pages+0x21c/0x480 [btrfs]
      [258532.052906]  extent_writepages+0x52/0xb0 [btrfs]
      [258532.052911]  do_writepages+0x23/0x80
      [258532.052915]  __filemap_fdatawrite_range+0xd2/0x110
      [258532.052938]  btrfs_fdatawrite_range+0x1b/0x50 [btrfs]
      [258532.052954]  start_ordered_ops+0x57/0xa0 [btrfs]
      [258532.052973]  ? btrfs_sync_file+0x225/0x490 [btrfs]
      [258532.052988]  btrfs_sync_file+0x225/0x490 [btrfs]
      [258532.052997]  __x64_sys_msync+0x199/0x200
      [258532.053004]  do_syscall_64+0x5c/0x250
      [258532.053007]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
      [258532.053010] RIP: 0033:0x7f86a7dfd760
      (...)
      [258532.053014] RSP: 002b:00007ffd99af0368 EFLAGS: 00000246 ORIG_RAX: 000000000000001a
      [258532.053016] RAX: ffffffffffffffda RBX: 0000000000000ec9 RCX: 00007f86a7dfd760
      [258532.053017] RDX: 0000000000000004 RSI: 000000000000836c RDI: 00007f86a8221000
      [258532.053019] RBP: 0000000000021ec9 R08: 0000000000000003 R09: 00007f86a812037c
      [258532.053020] R10: 0000000000000001 R11: 0000000000000246 R12: 00000000000074a3
      [258532.053021] R13: 00007f86a8221000 R14: 000000000000836c R15: 0000000000000001
      [258532.053032] irq event stamp: 1653450494
      [258532.053035] hardirqs last  enabled at (1653450493): [<ffffffff9dec69f9>] _raw_spin_unlock_irq+0x29/0x50
      [258532.053037] hardirqs last disabled at (1653450494): [<ffffffff9d4048ea>] trace_hardirqs_off_thunk+0x1a/0x20
      [258532.053039] softirqs last  enabled at (1653449852): [<ffffffff9e200466>] __do_softirq+0x466/0x6bd
      [258532.053042] softirqs last disabled at (1653449845): [<ffffffff9d4c8a0c>] irq_exit+0xec/0x120
      [258532.053043] ---[ end trace 8476fce13d9ce20a ]---
    
    Which results in flooding dmesg/syslog since btrfs_drop_extent_cache()
    uses WARN_ON() and not WARN_ON_ONCE().
    
    So fix this issue by changing run_delalloc_nocow()'s loop to move to the
    next extent item when the current extent item ends at at offset less than
    or equals to the current offset instead of the start offset.
    
    Fixes: 80ff385665b7fc ("Btrfs: update nodatacow code v2")
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit fcca68ca3d84ecedbb2adf478daecdfc71212e06
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Fri Dec 6 09:37:18 2019 -0500

    btrfs: do not leak reloc root if we fail to read the fs root
    
    commit ca1aa2818a53875cfdd175fb5e9a2984e997cce9 upstream.
    
    If we fail to read the fs root corresponding with a reloc root we'll
    just break out and free the reloc roots.  But we remove our current
    reloc_root from this list higher up, which means we'll leak this
    reloc_root.  Fix this by adding ourselves back to the reloc_roots list
    so we are properly cleaned up.
    
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
    Signed-off-by: Josef Bacik <josef@toxicpanda.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 78818411fd14f12213adbf1d0e5723784d0aa912
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Fri Dec 6 09:37:17 2019 -0500

    btrfs: skip log replay on orphaned roots
    
    commit 9bc574de590510eff899c3ca8dbaf013566b5efe upstream.
    
    My fsstress modifications coupled with generic/475 uncovered a failure
    to mount and replay the log if we hit a orphaned root.  We do not want
    to replay the log for an orphan root, but it's completely legitimate to
    have an orphaned root with a log attached.  Fix this by simply skipping
    replaying the log.  We still need to pin it's root node so that we do
    not overwrite it while replaying other logs, as we re-read the log root
    at every stage of the replay.
    
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 3.16:
     - Pass fs_info->extent_root, instead of fs_info, as first argument to
       btrfs_pin_extent_for_log_replay()
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3ff5dfb8d275cf31ea376b0bea3db9f8efa00eee
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Fri Dec 6 11:39:00 2019 -0500

    btrfs: handle ENOENT in btrfs_uuid_tree_iterate
    
    commit 714cd3e8cba6841220dce9063a7388a81de03825 upstream.
    
    If we get an -ENOENT back from btrfs_uuid_iter_rem when iterating the
    uuid tree we'll just continue and do btrfs_next_item().  However we've
    done a btrfs_release_path() at this point and no longer have a valid
    path.  So increment the key and go back and do a normal search.
    
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
    Signed-off-by: Josef Bacik <josef@toxicpanda.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 5fd90a8e77d5c4b02d075547b44fe12f9a1977bf
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Fri Dec 6 09:37:15 2019 -0500

    btrfs: abort transaction after failed inode updates in create_subvol
    
    commit c7e54b5102bf3614cadb9ca32d7be73bad6cecf0 upstream.
    
    We can just abort the transaction here, and in fact do that for every
    other failure in this function except these two cases.
    
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 3.16:
     - Add root as second argument to btrfs_abort_transaction()
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 28f515f78cccc7301670b3f33eccc43916d121d8
Author: Filipe Manana <fdmanana@suse.com>
Date:   Fri Dec 6 12:27:39 2019 +0000

    Btrfs: fix removal logic of the tree mod log that leads to use-after-free issues
    
    commit 6609fee8897ac475378388238456c84298bff802 upstream.
    
    When a tree mod log user no longer needs to use the tree it calls
    btrfs_put_tree_mod_seq() to remove itself from the list of users and
    delete all no longer used elements of the tree's red black tree, which
    should be all elements with a sequence number less then our equals to
    the caller's sequence number. However the logic is broken because it
    can delete and free elements from the red black tree that have a
    sequence number greater then the caller's sequence number:
    
    1) At a point in time we have sequence numbers 1, 2, 3 and 4 in the
       tree mod log;
    
    2) The task which got assigned the sequence number 1 calls
       btrfs_put_tree_mod_seq();
    
    3) Sequence number 1 is deleted from the list of sequence numbers;
    
    4) The current minimum sequence number is computed to be the sequence
       number 2;
    
    5) A task using sequence number 2 is at tree_mod_log_rewind() and gets
       a pointer to one of its elements from the red black tree through
       a call to tree_mod_log_search();
    
    6) The task with sequence number 1 iterates the red black tree of tree
       modification elements and deletes (and frees) all elements with a
       sequence number less then or equals to 2 (the computed minimum sequence
       number) - it ends up only leaving elements with sequence numbers of 3
       and 4;
    
    7) The task with sequence number 2 now uses the pointer to its element,
       already freed by the other task, at __tree_mod_log_rewind(), resulting
       in a use-after-free issue. When CONFIG_DEBUG_PAGEALLOC=y it produces
       a trace like the following:
    
      [16804.546854] general protection fault: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC PTI
      [16804.547451] CPU: 0 PID: 28257 Comm: pool Tainted: G        W         5.4.0-rc8-btrfs-next-51 #1
      [16804.548059] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-0-ga698c8995f-prebuilt.qemu.org 04/01/2014
      [16804.548666] RIP: 0010:rb_next+0x16/0x50
      (...)
      [16804.550581] RSP: 0018:ffffb948418ef9b0 EFLAGS: 00010202
      [16804.551227] RAX: 6b6b6b6b6b6b6b6b RBX: ffff90e0247f6600 RCX: 6b6b6b6b6b6b6b6b
      [16804.551873] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff90e0247f6600
      [16804.552504] RBP: ffff90dffe0d4688 R08: 0000000000000001 R09: 0000000000000000
      [16804.553136] R10: ffff90dffa4a0040 R11: 0000000000000000 R12: 000000000000002e
      [16804.553768] R13: ffff90e0247f6600 R14: 0000000000001663 R15: ffff90dff77862b8
      [16804.554399] FS:  00007f4b197ae700(0000) GS:ffff90e036a00000(0000) knlGS:0000000000000000
      [16804.555039] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [16804.555683] CR2: 00007f4b10022000 CR3: 00000002060e2004 CR4: 00000000003606f0
      [16804.556336] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [16804.556968] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [16804.557583] Call Trace:
      [16804.558207]  __tree_mod_log_rewind+0xbf/0x280 [btrfs]
      [16804.558835]  btrfs_search_old_slot+0x105/0xd00 [btrfs]
      [16804.559468]  resolve_indirect_refs+0x1eb/0xc70 [btrfs]
      [16804.560087]  ? free_extent_buffer.part.19+0x5a/0xc0 [btrfs]
      [16804.560700]  find_parent_nodes+0x388/0x1120 [btrfs]
      [16804.561310]  btrfs_check_shared+0x115/0x1c0 [btrfs]
      [16804.561916]  ? extent_fiemap+0x59d/0x6d0 [btrfs]
      [16804.562518]  extent_fiemap+0x59d/0x6d0 [btrfs]
      [16804.563112]  ? __might_fault+0x11/0x90
      [16804.563706]  do_vfs_ioctl+0x45a/0x700
      [16804.564299]  ksys_ioctl+0x70/0x80
      [16804.564885]  ? trace_hardirqs_off_thunk+0x1a/0x20
      [16804.565461]  __x64_sys_ioctl+0x16/0x20
      [16804.566020]  do_syscall_64+0x5c/0x250
      [16804.566580]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
      [16804.567153] RIP: 0033:0x7f4b1ba2add7
      (...)
      [16804.568907] RSP: 002b:00007f4b197adc88 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
      [16804.569513] RAX: ffffffffffffffda RBX: 00007f4b100210d8 RCX: 00007f4b1ba2add7
      [16804.570133] RDX: 00007f4b100210d8 RSI: 00000000c020660b RDI: 0000000000000003
      [16804.570726] RBP: 000055de05a6cfe0 R08: 0000000000000000 R09: 00007f4b197add44
      [16804.571314] R10: 0000000000000000 R11: 0000000000000246 R12: 00007f4b197add48
      [16804.571905] R13: 00007f4b197add40 R14: 00007f4b100210d0 R15: 00007f4b197add50
      (...)
      [16804.575623] ---[ end trace 87317359aad4ba50 ]---
    
    Fix this by making btrfs_put_tree_mod_seq() skip deletion of elements that
    have a sequence number equals to the computed minimum sequence number, and
    not just elements with a sequence number greater then that minimum.
    
    Fixes: bd989ba359f2ac ("Btrfs: add tree modification log functions")
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2829ea42c1d26c8e5d4a6d31816d1b0b5f5a0acc
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Tue Nov 19 13:59:35 2019 -0500

    btrfs: do not call synchronize_srcu() in inode_tree_del
    
    commit f72ff01df9cf5db25c76674cac16605992d15467 upstream.
    
    Testing with the new fsstress uncovered a pretty nasty deadlock with
    lookup and snapshot deletion.
    
    Process A
    unlink
     -> final iput
       -> inode_tree_del
         -> synchronize_srcu(subvol_srcu)
    
    Process B
    btrfs_lookup  <- srcu_read_lock() acquired here
      -> btrfs_iget
        -> find inode that has I_FREEING set
          -> __wait_on_freeing_inode()
    
    We're holding the srcu_read_lock() while doing the iget in order to make
    sure our fs root doesn't go away, and then we are waiting for the inode
    to finish freeing.  However because the free'ing process is doing a
    synchronize_srcu() we deadlock.
    
    Fix this by dropping the synchronize_srcu() in inode_tree_del().  We
    don't need people to stop accessing the fs root at this point, we're
    only adding our empty root to the dead roots list.
    
    A larger much more invasive fix is forthcoming to address how we deal
    with fs roots, but this fixes the immediate problem.
    
    Fixes: 76dda93c6ae2 ("Btrfs: add snapshot/subvolume destroy ioctl")
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 3.16: No fs_info variable was used here]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5a1f8cc7d9dde54ab941fc8dbcb4239307d2efb4
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Sat Dec 7 13:05:18 2019 -0800

    HID: hid-input: clear unmapped usages
    
    commit 4f3882177240a1f55e45a3d241d3121341bead78 upstream.
    
    We should not be leaving half-mapped usages with potentially invalid
    keycodes, as that may confuse hidinput_find_key() when the key is located
    by index, which may end up feeding way too large keycode into the VT
    keyboard handler and cause OOB write there:
    
    BUG: KASAN: global-out-of-bounds in clear_bit include/asm-generic/bitops-instrumented.h:56 [inline]
    BUG: KASAN: global-out-of-bounds in kbd_keycode drivers/tty/vt/keyboard.c:1411 [inline]
    BUG: KASAN: global-out-of-bounds in kbd_event+0xe6b/0x3790 drivers/tty/vt/keyboard.c:1495
    Write of size 8 at addr ffffffff89a1b2d8 by task syz-executor108/1722
    ...
     kbd_keycode drivers/tty/vt/keyboard.c:1411 [inline]
     kbd_event+0xe6b/0x3790 drivers/tty/vt/keyboard.c:1495
     input_to_handler+0x3b6/0x4c0 drivers/input/input.c:118
     input_pass_values.part.0+0x2e3/0x720 drivers/input/input.c:145
     input_pass_values drivers/input/input.c:949 [inline]
     input_set_keycode+0x290/0x320 drivers/input/input.c:954
     evdev_handle_set_keycode_v2+0xc4/0x120 drivers/input/evdev.c:882
     evdev_do_ioctl drivers/input/evdev.c:1150 [inline]
    
    Reported-by: syzbot+19340dff067c2d3835c0@syzkaller.appspotmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Tested-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d12d80d9b64eef1e413c3dca08a6e92b3cc9e094
Author: Parav Pandit <parav@mellanox.com>
Date:   Thu Dec 12 11:12:13 2019 +0200

    IB/mlx4: Follow mirror sequence of device add during device removal
    
    commit 89f988d93c62384758b19323c886db917a80c371 upstream.
    
    Current code device add sequence is:
    
    ib_register_device()
    ib_mad_init()
    init_sriov_init()
    register_netdev_notifier()
    
    Therefore, the remove sequence should be,
    
    unregister_netdev_notifier()
    close_sriov()
    mad_cleanup()
    ib_unregister_device()
    
    However it is not above.
    Hence, make do above remove sequence.
    
    Fixes: fa417f7b520ee ("IB/mlx4: Add support for IBoE")
    Signed-off-by: Parav Pandit <parav@mellanox.com>
    Reviewed-by: Maor Gottlieb <maorg@mellanox.com>
    Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
    Link: https://lore.kernel.org/r/20191212091214.315005-3-leon@kernel.org
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    [bwh: Backported to 3.16: No need to call mlx4_ib_diag_cleanup()]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit c02dd068bd79e105230ff290b53bbea2a7ab7d59
Author: Moni Shoua <monis@mellanox.com>
Date:   Thu Aug 21 14:28:42 2014 +0300

    IB/mlx4: Avoid executing gid task when device is being removed
    
    commit 4bf9715f184969dc703bde7be94919995024a6a9 upstream.
    
    When device is being removed (e.g during VPI port link type change
    from ETH to IB), tasks for gid table changes should not be executed.
    
    Flush the current queue of tasks and block further tasks from entering the queue.
    
    Signed-off-by: Moni Shoua <monis@mellanox.com>
    Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: Roland Dreier <roland@purestorage.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 9503886f774cf4e0b62ec68ec270bf4a67140975
Author: Leo Yan <leo.yan@linaro.org>
Date:   Wed Nov 27 22:15:43 2019 +0800

    tty: serial: msm_serial: Fix lockup for sysrq and oops
    
    commit 0e4f7f920a5c6bfe5e851e989f27b35a0cc7fb7e upstream.
    
    As the commit 677fe555cbfb ("serial: imx: Fix recursive locking bug")
    has mentioned the uart driver might cause recursive locking between
    normal printing and the kernel debugging facilities (e.g. sysrq and
    oops).  In the commit it gave out suggestion for fixing recursive
    locking issue: "The solution is to avoid locking in the sysrq case
    and trylock in the oops_in_progress case."
    
    This patch follows the suggestion (also used the exactly same code with
    other serial drivers, e.g. amba-pl011.c) to fix the recursive locking
    issue, this can avoid stuck caused by deadlock and print out log for
    sysrq and oops.
    
    Fixes: 04896a77a97b ("msm_serial: serial driver for MSM7K onboard serial peripheral.")
    Signed-off-by: Leo Yan <leo.yan@linaro.org>
    Reviewed-by: Jeffrey Hugo <jeffrey.l.hugo@gmail.com>
    Link: https://lore.kernel.org/r/20191127141544.4277-2-leo.yan@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7bb311ffc542536f5b728c10e56fa9a9f9e1f17f
Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Date:   Thu Dec 12 12:37:13 2019 +0300

    usb: dwc3: pci: add ID for the Intel Comet Lake -H variant
    
    commit 3c3caae4cd6e122472efcf64759ff6392fb6bce2 upstream.
    
    The original ID that was added for Comet Lake PCH was
    actually for the -LP (low power) variant even though the
    constant for it said CMLH. Changing that while at it.
    
    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Acked-by: Felipe Balbi <balbi@kernel.org>
    Link: https://lore.kernel.org/r/20191212093713.60614-1-heikki.krogerus@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16:
     - No properties support
     - Adjust context, indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 514f2e49b5ad66a99aec48f29a272602e8848b93
Author: Felipe Balbi <felipe.balbi@linux.intel.com>
Date:   Wed Dec 13 16:03:22 2017 +0200

    usb: dwc3: pci: add support for TigerLake Devices
    
    commit b3649dee5fbb0f6585010e6e9313dfcbb075b22b upstream.
    
    This patch adds the necessary PCI ID for TGP-LP devices.
    
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    [bwh: Backported to 3.16:
     - No properties support
     - Adjust context, indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 225ca434fb9c75a6de5b255c7ea24fe99cab435a
Author: Felipe Balbi <felipe.balbi@linux.intel.com>
Date:   Mon Jun 11 11:21:12 2018 +0300

    usb: dwc3: pci: Add Support for Intel Elkhart Lake Devices
    
    commit dbb0569de852fb4576d6f62078d515f989a181ca upstream.
    
    This patch simply adds a new PCI Device ID
    
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    [bwh: Backported to 3.16:
     - No properties support
     - Adjust context, indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7c228ed78e4928a3cae9bf1f503273ca3ac36e1c
Author: Felipe Balbi <felipe.balbi@linux.intel.com>
Date:   Thu Jan 31 11:04:19 2019 +0200

    usb: dwc3: pci: add support for Comet Lake PCH ID
    
    commit 7ae622c978db6b2e28b4fced6ecd2a174492059d upstream.
    
    This patch simply adds a new PCI Device ID
    
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    [bwh: Backported to 3.16:
     - No properties support
     - Adjust context, indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5c1a55aa0f126ed8adbc8838a9d9b32b30a4ffca
Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Date:   Thu Jun 15 12:57:30 2017 +0300

    usb: dwc3: pci: add support for Intel IceLake
    
    commit 00908693c481f7298adf8cf4d2ff3dfbea8c375f upstream.
    
    PCI IDs for Intel IceLake.
    
    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    [bwh: Backported to 3.16: adjust context, indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit fee026c30588beda71df8c244711ac57f2e910c6
Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Date:   Fri Apr 1 17:13:13 2016 +0300

    usb: dwc3: pci: add Intel Cannonlake PCI IDs
    
    commit 682179592e48fa66056fbad1a86604be4992f885 upstream.
    
    Intel Cannonlake PCH has the same DWC3 than Intel
    Sunrisepoint. Add the new IDs to the supported devices.
    
    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    [bwh: Backported to 3.16: adjust context, indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2e40cbb1e74f48ea7a3857038a5b9162782d7f6a
Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Date:   Fri Apr 1 17:13:12 2016 +0300

    usb: dwc3: pci: add Intel Gemini Lake PCI ID
    
    commit 8f8983a5683623b62b339d159573f95a1fce44f3 upstream.
    
    Intel Gemini Lake SoC has the same DWC3 than Broxton. Add
    the new ID to the supported Devices.
    
    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    [bwh: Backported to 3.16: adjust context, indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 4c7b176e574517fa797e199bf1a1b7ea40cac2aa
Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Date:   Fri Apr 1 17:13:11 2016 +0300

    usb: dwc3: pci: add Intel Kabylake PCI ID
    
    commit 4491ed5042f0419b22a4b08331adb54af31e2caa upstream.
    
    Intel Kabylake PCH has the same DWC3 than Intel
    Sunrisepoint. Add the new ID to the supported devices.
    
    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    [bwh: Backported to 3.16: adjust context, indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 18362d8e6bee63bcca93bfe022e5026df6e2322c
Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Date:   Fri Apr 1 17:13:10 2016 +0300

    usb: dwc3: pci: add ID for one more Intel Broxton platform
    
    commit 1ffb4d5cc78a3a99109ff0808ce6915de07a0588 upstream.
    
    BXT-M is a Intel Broxton SoC based platform with unique PCI ID.
    
    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    [bwh: Backported to 3.16: adjust context, indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 161d5af9329fcfcf378ba5d4b2ea0e20d6c9b736
Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Date:   Wed Oct 21 14:37:04 2015 +0300

    usb: dwc3: pci: add support for Intel Broxton SOC
    
    commit b4c580a43d520b7812c0fd064fbab929ce2f1da0 upstream.
    
    PCI IDs for Broxton based platforms.
    
    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: Felipe Balbi <balbi@ti.com>
    [bwh: Backported to 3.16: adjust context, indentation]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 9ac3b771efda5a1a2b271d8af8d034d8464c475b
Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Date:   Thu Dec 18 16:39:14 2014 +0200

    usb: dwc3: pci: add support for Intel Sunrise Point PCH
    
    commit 84a2b61b6eb94036093531cdabc448dddfbae45a upstream.
    
    Add PCI IDs for Intel Sunrise Point PCH.
    
    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: Felipe Balbi <balbi@ti.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8509c450b391da0f1d28fff187900b9db7a27a2f
Author: Alan Cox <alan@linux.intel.com>
Date:   Wed Sep 24 10:40:25 2014 +0300

    usb: dwc3: pci: Add PCI ID for Intel Braswell
    
    commit 7d643664ea559b36188cae264047ce3c9bfec3a2 upstream.
    
    The device controller is the same but it has different PCI ID. Add this new
    ID to the driver's list of supported IDs.
    
    Signed-off-by: Alan Cox <alan@linux.intel.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: Felipe Balbi <balbi@ti.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d16baec9a682ff8747dc7b1caf2d9a0ca9772c1a
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Wed Dec 11 16:20:07 2019 +0200

    xhci: make sure interrupts are restored to correct state
    
    commit bd82873f23c9a6ad834348f8b83f3b6a5bca2c65 upstream.
    
    spin_unlock_irqrestore() might be called with stale flags after
    reading port status, possibly restoring interrupts to a incorrect
    state.
    
    If a usb2 port just finished resuming while the port status is read
    the spin lock will be temporary released and re-acquired in a separate
    function. The flags parameter is passed as value instead of a pointer,
    not updating flags properly before the final spin_unlock_irqrestore()
    is called.
    
    Fixes: 8b3d45705e54 ("usb: Fix xHCI host issues on remote wakeup.")
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20191211142007.8847-7-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8026fabe90db30f32cb9225e33d51e37e414d216
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Wed Dec 11 16:20:06 2019 +0200

    xhci: handle some XHCI_TRUST_TX_LENGTH quirks cases as default behaviour.
    
    commit 7ff11162808cc2ec66353fc012c58bb449c892c3 upstream.
    
    xhci driver claims it needs XHCI_TRUST_TX_LENGTH quirk for both
    Broadcom/Cavium and a Renesas xHC controllers.
    
    The quirk was inteded for handling false "success" complete event for
    transfers that had data left untransferred.
    These transfers should complete with "short packet" events instead.
    
    In these two new cases the false "success" completion is reported
    after a "short packet" if the TD consists of several TRBs.
    xHCI specs 4.10.1.1.2 say remaining TRBs should report "short packet"
    as well after the first short packet in a TD, but this issue seems so
    common it doesn't make sense to add the quirk for all vendors.
    
    Turn these events into short packets automatically instead.
    
    This gets rid of the  "The WARN Successful completion on short TX for
    slot 1 ep 1: needs XHCI_TRUST_TX_LENGTH quirk" warning in many cases.
    
    Reported-by: Eli Billauer <eli.billauer@gmail.com>
    Reported-by: Ard Biesheuvel <ardb@kernel.org>
    Tested-by: Eli Billauer <eli.billauer@gmail.com>
    Tested-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20191211142007.8847-6-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5475bdfed8c45c8323f17059589b44ac18caee29
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Tue Dec 10 16:26:11 2019 -0500

    HID: Fix slab-out-of-bounds read in hid_field_extract
    
    commit 8ec321e96e056de84022c032ffea253431a83c3c upstream.
    
    The syzbot fuzzer found a slab-out-of-bounds bug in the HID report
    handler.  The bug was caused by a report descriptor which included a
    field with size 12 bits and count 4899, for a total size of 7349
    bytes.
    
    The usbhid driver uses at most a single-page 4-KB buffer for reports.
    In the test there wasn't any problem about overflowing the buffer,
    since only one byte was received from the device.  Rather, the bug
    occurred when the HID core tried to extract the data from the report
    fields, which caused it to try reading data beyond the end of the
    allocated buffer.
    
    This patch fixes the problem by rejecting any report whose total
    length exceeds the HID_MAX_BUFFER_SIZE limit (minus one byte to allow
    for a possible report index).  In theory a device could have a report
    longer than that, but if there was such a thing we wouldn't handle it
    correctly anyway.
    
    Reported-and-tested-by: syzbot+09ef48aa58261464b621@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 a3c7856434a682d52fe106991dc2ffff6f80241d
Author: David Hildenbrand <david@redhat.com>
Date:   Wed Dec 11 12:11:52 2019 +0100

    virtio-balloon: fix managed page counts when migrating pages between zones
    
    commit 63341ab03706e11a31e3dd8ccc0fbc9beaf723f0 upstream.
    
    In case we have to migrate a ballon page to a newpage of another zone, the
    managed page count of both zones is wrong. Paired with memory offlining
    (which will adjust the managed page count), we can trigger kernel crashes
    and all kinds of different symptoms.
    
    One way to reproduce:
    1. Start a QEMU guest with 4GB, no NUMA
    2. Hotplug a 1GB DIMM and online the memory to ZONE_NORMAL
    3. Inflate the balloon to 1GB
    4. Unplug the DIMM (be quick, otherwise unmovable data ends up on it)
    5. Observe /proc/zoneinfo
      Node 0, zone   Normal
        pages free     16810
              min      24848885473806
              low      18471592959183339
              high     36918337032892872
              spanned  262144
              present  262144
              managed  18446744073709533486
    6. Do anything that requires some memory (e.g., inflate the balloon some
    more). The OOM goes crazy and the system crashes
      [  238.324946] Out of memory: Killed process 537 (login) total-vm:27584kB, anon-rss:860kB, file-rss:0kB, shmem-rss:00
      [  238.338585] systemd invoked oom-killer: gfp_mask=0x100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
      [  238.339420] CPU: 0 PID: 1 Comm: systemd Tainted: G      D W         5.4.0-next-20191204+ #75
      [  238.340139] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-59-gc9ba5276e321-prebuilt.qemu4
      [  238.341121] Call Trace:
      [  238.341337]  dump_stack+0x8f/0xd0
      [  238.341630]  dump_header+0x61/0x5ea
      [  238.341942]  oom_kill_process.cold+0xb/0x10
      [  238.342299]  out_of_memory+0x24d/0x5a0
      [  238.342625]  __alloc_pages_slowpath+0xd12/0x1020
      [  238.343024]  __alloc_pages_nodemask+0x391/0x410
      [  238.343407]  pagecache_get_page+0xc3/0x3a0
      [  238.343757]  filemap_fault+0x804/0xc30
      [  238.344083]  ? ext4_filemap_fault+0x28/0x42
      [  238.344444]  ext4_filemap_fault+0x30/0x42
      [  238.344789]  __do_fault+0x37/0x1a0
      [  238.345087]  __handle_mm_fault+0x104d/0x1ab0
      [  238.345450]  handle_mm_fault+0x169/0x360
      [  238.345790]  do_user_addr_fault+0x20d/0x490
      [  238.346154]  do_page_fault+0x31/0x210
      [  238.346468]  async_page_fault+0x43/0x50
      [  238.346797] RIP: 0033:0x7f47eba4197e
      [  238.347110] Code: Bad RIP value.
      [  238.347387] RSP: 002b:00007ffd7c0c1890 EFLAGS: 00010293
      [  238.347834] RAX: 0000000000000002 RBX: 000055d196a20a20 RCX: 00007f47eba4197e
      [  238.348437] RDX: 0000000000000033 RSI: 00007ffd7c0c18c0 RDI: 0000000000000004
      [  238.349047] RBP: 00007ffd7c0c1c20 R08: 0000000000000000 R09: 0000000000000033
      [  238.349660] R10: 00000000ffffffff R11: 0000000000000293 R12: 0000000000000001
      [  238.350261] R13: ffffffffffffffff R14: 0000000000000000 R15: 00007ffd7c0c18c0
      [  238.350878] Mem-Info:
      [  238.351085] active_anon:3121 inactive_anon:51 isolated_anon:0
      [  238.351085]  active_file:12 inactive_file:7 isolated_file:0
      [  238.351085]  unevictable:0 dirty:0 writeback:0 unstable:0
      [  238.351085]  slab_reclaimable:5565 slab_unreclaimable:10170
      [  238.351085]  mapped:3 shmem:111 pagetables:155 bounce:0
      [  238.351085]  free:720717 free_pcp:2 free_cma:0
      [  238.353757] Node 0 active_anon:12484kB inactive_anon:204kB active_file:48kB inactive_file:28kB unevictable:0kB iss
      [  238.355979] Node 0 DMA free:11556kB min:36kB low:48kB high:60kB reserved_highatomic:0KB active_anon:152kB inactivB
      [  238.358345] lowmem_reserve[]: 0 2955 2884 2884 2884
      [  238.358761] Node 0 DMA32 free:2677864kB min:7004kB low:10028kB high:13052kB reserved_highatomic:0KB active_anon:0B
      [  238.361202] lowmem_reserve[]: 0 0 72057594037927865 72057594037927865 72057594037927865
      [  238.361888] Node 0 Normal free:193448kB min:99395541895224kB low:73886371836733356kB high:147673348131571488kB reB
      [  238.364765] lowmem_reserve[]: 0 0 0 0 0
      [  238.365101] Node 0 DMA: 7*4kB (U) 5*8kB (UE) 6*16kB (UME) 2*32kB (UM) 1*64kB (U) 2*128kB (UE) 3*256kB (UME) 2*512B
      [  238.366379] Node 0 DMA32: 0*4kB 1*8kB (U) 2*16kB (UM) 2*32kB (UM) 2*64kB (UM) 1*128kB (U) 1*256kB (U) 1*512kB (U)B
      [  238.367654] Node 0 Normal: 1985*4kB (UME) 1321*8kB (UME) 844*16kB (UME) 524*32kB (UME) 300*64kB (UME) 138*128kB (B
      [  238.369184] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
      [  238.369915] 130 total pagecache pages
      [  238.370241] 0 pages in swap cache
      [  238.370533] Swap cache stats: add 0, delete 0, find 0/0
      [  238.370981] Free swap  = 0kB
      [  238.371239] Total swap = 0kB
      [  238.371488] 1048445 pages RAM
      [  238.371756] 0 pages HighMem/MovableOnly
      [  238.372090] 306992 pages reserved
      [  238.372376] 0 pages cma reserved
      [  238.372661] 0 pages hwpoisoned
    
    In another instance (older kernel), I was able to observe this
    (negative page count :/):
      [  180.896971] Offlined Pages 32768
      [  182.667462] Offlined Pages 32768
      [  184.408117] Offlined Pages 32768
      [  186.026321] Offlined Pages 32768
      [  187.684861] Offlined Pages 32768
      [  189.227013] Offlined Pages 32768
      [  190.830303] Offlined Pages 32768
      [  190.833071] Built 1 zonelists, mobility grouping on.  Total pages: -36920272750453009
    
    In another instance (older kernel), I was no longer able to start any
    process:
      [root@vm ~]# [  214.348068] Offlined Pages 32768
      [  215.973009] Offlined Pages 32768
      cat /proc/meminfo
      -bash: fork: Cannot allocate memory
      [root@vm ~]# cat /proc/meminfo
      -bash: fork: Cannot allocate memory
    
    Fix it by properly adjusting the managed page count when migrating if
    the zone changed. The managed page count of the zones now looks after
    unplug of the DIMM (and after deflating the balloon) just like before
    inflating the balloon (and plugging+onlining the DIMM).
    
    We'll temporarily modify the totalram page count. If this ever becomes a
    problem, we can fine tune by providing helpers that don't touch
    the totalram pages (e.g., adjust_zone_managed_page_count()).
    
    Please note that fixing up the managed page count is only necessary when
    we adjusted the managed page count when inflating - only if we
    don't have VIRTIO_BALLOON_F_DEFLATE_ON_OOM. With that feature, the
    managed page count is not touched when inflating/deflating.
    
    Reported-by: Yumei Huang <yuhuang@redhat.com>
    Fixes: 3dcc0571cd64 ("mm: correctly update zone->managed_pages")
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Jiang Liu <liuj97@gmail.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Igor Mammedov <imammedo@redhat.com>
    Cc: virtualization@lists.linux-foundation.org
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    [bwh: Backported to 3.16: Deflate-on-OOM is not supported at all so don't
     check that flag]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 71c5f8c5279d1c2100cabbb6300c01cc83de2c5a
Author: Russell King <rmk+kernel@armlinux.org.uk>
Date:   Sat Dec 7 16:20:18 2019 +0000

    gpiolib: fix up emulated open drain outputs
    
    commit 256efaea1fdc4e38970489197409a26125ee0aaa upstream.
    
    gpiolib has a corner case with open drain outputs that are emulated.
    When such outputs are outputting a logic 1, emulation will set the
    hardware to input mode, which will cause gpiod_get_direction() to
    report that it is in input mode. This is different from the behaviour
    with a true open-drain output.
    
    Unify the semantics here.
    
    Suggested-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3686b986e6663905e6799e6a5263095307b1e655
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Dec 10 12:47:51 2019 +0100

    staging: rtl8712: fix interface sanity check
    
    commit c724f776f048538ecfdf53a52b7a522309f5c504 upstream.
    
    Make sure to use the current alternate setting when verifying the
    interface descriptors to avoid binding to an invalid interface.
    
    Failing to do so could cause the driver to misbehave or trigger a WARN()
    in usb_submit_urb() that kernels with panic_on_warn set would choke on.
    
    Fixes: 2865d42c78a9 ("staging: r8712u: Add the new driver to the mainline kernel")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20191210114751.5119-3-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e3f0b8a121d02d670629b530fe512e7499fc55d2
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Dec 10 12:47:50 2019 +0100

    staging: rtl8188eu: fix interface sanity check
    
    commit 74ca34118a0e05793935d804ccffcedd6eb56596 upstream.
    
    Make sure to use the current alternate setting when verifying the
    interface descriptors to avoid binding to an invalid interface.
    
    Failing to do so could cause the driver to misbehave or trigger a WARN()
    in usb_submit_urb() that kernels with panic_on_warn set would choke on.
    
    Fixes: c2478d39076b ("staging: r8188eu: Add files for new driver - part 20")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20191210114751.5119-2-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b7cfafc259c53fbc353b3f3b319249150614bab6
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Dec 10 12:25:58 2019 +0100

    USB: atm: ueagle-atm: add missing endpoint check
    
    commit 09068c1ad53fb077bdac288869dec2435420bdc4 upstream.
    
    Make sure that the interrupt interface has an endpoint before trying to
    access its endpoint descriptors to avoid dereferencing a NULL pointer.
    
    The driver binds to the interrupt interface with interface number 0, but
    must not assume that this interface or its current alternate setting are
    the first entries in the corresponding configuration arrays.
    
    Fixes: b72458a80c75 ("[PATCH] USB: Eagle and ADI 930 usb adsl modem driver")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20191210112601.3561-2-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 53fb8516e25a9479cb079a751d6c18ae5236c426
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Dec 10 12:25:59 2019 +0100

    USB: adutux: fix interface sanity check
    
    commit 3c11c4bed02b202e278c0f5c319ae435d7fb9815 upstream.
    
    Make sure to use the current alternate setting when verifying the
    interface descriptors to avoid binding to an invalid interface.
    
    Failing to do so could cause the driver to misbehave or trigger a WARN()
    in usb_submit_urb() that kernels with panic_on_warn set would choke on.
    
    Fixes: 03270634e242 ("USB: Add ADU support for Ontrak ADU devices")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20191210112601.3561-3-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit fdf7e19c8bc887c764ca6ecd4e062ebb910fe39f
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Dec 10 12:26:00 2019 +0100

    USB: idmouse: fix interface sanity checks
    
    commit 59920635b89d74b9207ea803d5e91498d39e8b69 upstream.
    
    Make sure to use the current alternate setting when verifying the
    interface descriptors to avoid binding to an invalid interface.
    
    Failing to do so could cause the driver to misbehave or trigger a WARN()
    in usb_submit_urb() that kernels with panic_on_warn set would choke on.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20191210112601.3561-4-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b7555eb3d62dfb397afd26c126274677f9606f26
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Dec 10 12:26:01 2019 +0100

    USB: serial: io_edgeport: fix epic endpoint lookup
    
    commit 7c5a2df3367a2c4984f1300261345817d95b71f8 upstream.
    
    Make sure to use the current alternate setting when looking up the
    endpoints on epic devices to avoid binding to an invalid interface.
    
    Failing to do so could cause the driver to misbehave or trigger a WARN()
    in usb_submit_urb() that kernels with panic_on_warn set would choke on.
    
    Fixes: 6e8cf7751f9f ("USB: add EPIC support to the io_edgeport driver")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20191210112601.3561-5-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5b25e6caa7bad05432ba9c5ee786b31b9140b64d
Author: Pete Zaitcev <zaitcev@redhat.com>
Date:   Wed Dec 4 20:39:41 2019 -0600

    usb: mon: Fix a deadlock in usbmon between mmap and read
    
    commit 19e6317d24c25ee737c65d1ffb7483bdda4bb54a upstream.
    
    The problem arises because our read() function grabs a lock of the
    circular buffer, finds something of interest, then invokes copy_to_user()
    straight from the buffer, which in turn takes mm->mmap_sem. In the same
    time, the callback mon_bin_vma_fault() is invoked under mm->mmap_sem.
    It attempts to take the fetch lock and deadlocks.
    
    This patch does away with protecting of our page list with any
    semaphores, and instead relies on the kernel not close the device
    while mmap is active in a process.
    
    In addition, we prohibit re-sizing of a buffer while mmap is active.
    This way, when (now unlocked) fault is processed, it works with the
    page that is intended to be mapped-in, and not some other random page.
    Note that this may have an ABI impact, but hopefully no legitimate
    program is this wrong.
    
    Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
    Reported-by: syzbot+56f9673bb4cdcbeb0e92@syzkaller.appspotmail.com
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Fixes: 46eb14a6e158 ("USB: fix usbmon BUG trigger")
    Link: https://lore.kernel.org/r/20191204203941.3503452b@suzdal.zaitcev.lan
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 952c4f6a006968f00a9655aec3a4724cc0e61965
Author: Emiliano Ingrassia <ingrassia@epigenesys.com>
Date:   Wed Nov 27 17:03:55 2019 +0100

    usb: core: urb: fix URB structure initialization function
    
    commit 1cd17f7f0def31e3695501c4f86cd3faf8489840 upstream.
    
    Explicitly initialize URB structure urb_list field in usb_init_urb().
    This field can be potentially accessed uninitialized and its
    initialization is coherent with the usage of list_del_init() in
    usb_hcd_unlink_urb_from_ep() and usb_giveback_urb_bh() and its
    explicit initialization in usb_hcd_submit_urb() error path.
    
    Signed-off-by: Emiliano Ingrassia <ingrassia@epigenesys.com>
    Link: https://lore.kernel.org/r/20191127160355.GA27196@ingrassia.epigenesys.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 537374219fefd1668a9c4760c600611dc9f6c4e3
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Dec 2 09:56:10 2019 +0100

    staging: gigaset: add endpoint-type sanity check
    
    commit ed9ed5a89acba51b82bdff61144d4e4a4245ec8a upstream.
    
    Add missing endpoint-type sanity checks to probe.
    
    This specifically prevents a warning in USB core on URB submission when
    fuzzing USB descriptors.
    
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20191202085610.12719-4-johan@kernel.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 6113c5fe6ec39d38501c7fa50b884457c295533f
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Dec 2 09:56:09 2019 +0100

    staging: gigaset: fix illegal free on probe errors
    
    commit 84f60ca7b326ed8c08582417493982fe2573a9ad upstream.
    
    The driver failed to initialise its receive-buffer pointer, something
    which could lead to an illegal free on late probe errors.
    
    Fix this by making sure to clear all driver data at allocation.
    
    Fixes: 2032e2c2309d ("usb_gigaset: code cleanup")
    Cc: Tilman Schmidt <tilman@imap.cc>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20191202085610.12719-3-johan@kernel.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 3e12695882362380f5a3100a3e449b982b459ceb
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Dec 2 09:56:08 2019 +0100

    staging: gigaset: fix general protection fault on probe
    
    commit 53f35a39c3860baac1e5ca80bf052751cfb24a99 upstream.
    
    Fix a general protection fault when accessing the endpoint descriptors
    which could be triggered by a malicious device due to missing sanity
    checks on the number of endpoints.
    
    Reported-by: syzbot+35b1c403a14f5c89eba7@syzkaller.appspotmail.com
    Fixes: 07dc1f9f2f80 ("[PATCH] isdn4linux: Siemens Gigaset drivers - M105 USB DECT adapter")
    Cc: Hansjoerg Lipp <hjlipp@web.de>
    Cc: Tilman Schmidt <tilman@imap.cc>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20191202085610.12719-2-johan@kernel.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 c47fa2ce171799bd5a07da612fc2b950831d4aaf
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Tue Dec 3 12:45:09 2019 +0300

    scsi: iscsi: qla4xxx: fix double free in probe
    
    commit fee92f25777789d73e1936b91472e9c4644457c8 upstream.
    
    On this error path we call qla4xxx_mem_free() and then the caller also
    calls qla4xxx_free_adapter() which calls qla4xxx_mem_free().  It leads to a
    couple double frees:
    
    drivers/scsi/qla4xxx/ql4_os.c:8856 qla4xxx_probe_adapter() warn: 'ha->chap_dma_pool' double freed
    drivers/scsi/qla4xxx/ql4_os.c:8856 qla4xxx_probe_adapter() warn: 'ha->fw_ddb_dma_pool' double freed
    
    Fixes: afaf5a2d341d ("[SCSI] Initial Commit of qla4xxx")
    Link: https://lore.kernel.org/r/20191203094421.hw7ex7qr3j2rbsmx@kili.mountain
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a1e28dde99a6cf56f5db8e04421c7221af05cc85
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Wed Dec 4 02:54:27 2019 +0100

    ACPI: PM: Avoid attaching ACPI PM domain to certain devices
    
    commit b9ea0bae260f6aae546db224daa6ac1bd9d94b91 upstream.
    
    Certain ACPI-enumerated devices represented as platform devices in
    Linux, like fans, require special low-level power management handling
    implemented by their drivers that is not in agreement with the ACPI
    PM domain behavior.  That leads to problems with managing ACPI fans
    during system-wide suspend and resume.
    
    For this reason, make acpi_dev_pm_attach() skip the affected devices
    by adding a list of device IDs to avoid to it and putting the IDs of
    the affected devices into that list.
    
    Fixes: e5cc8ef31267 (ACPI / PM: Provide ACPI PM callback routines for subsystems)
    Reported-by: Zhang Rui <rui.zhang@intel.com>
    Tested-by: Todd Brandt <todd.e.brandt@linux.intel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8c1a8e6dba6a09d65ec7eef54ac13e36b7be9536
Author: Mao Wenan <maowenan@huawei.com>
Date:   Mon Dec 9 21:31:25 2019 +0800

    af_packet: set defaule value for tmo
    
    commit b43d1f9f7067c6759b1051e8ecb84e82cef569fe upstream.
    
    There is softlockup when using TPACKET_V3:
    ...
    NMI watchdog: BUG: soft lockup - CPU#2 stuck for 60010ms!
    (__irq_svc) from [<c0558a0c>] (_raw_spin_unlock_irqrestore+0x44/0x54)
    (_raw_spin_unlock_irqrestore) from [<c027b7e8>] (mod_timer+0x210/0x25c)
    (mod_timer) from [<c0549c30>]
    (prb_retire_rx_blk_timer_expired+0x68/0x11c)
    (prb_retire_rx_blk_timer_expired) from [<c027a7ac>]
    (call_timer_fn+0x90/0x17c)
    (call_timer_fn) from [<c027ab6c>] (run_timer_softirq+0x2d4/0x2fc)
    (run_timer_softirq) from [<c021eaf4>] (__do_softirq+0x218/0x318)
    (__do_softirq) from [<c021eea0>] (irq_exit+0x88/0xac)
    (irq_exit) from [<c0240130>] (msa_irq_exit+0x11c/0x1d4)
    (msa_irq_exit) from [<c0209cf0>] (handle_IPI+0x650/0x7f4)
    (handle_IPI) from [<c02015bc>] (gic_handle_irq+0x108/0x118)
    (gic_handle_irq) from [<c0558ee4>] (__irq_usr+0x44/0x5c)
    ...
    
    If __ethtool_get_link_ksettings() is failed in
    prb_calc_retire_blk_tmo(), msec and tmo will be zero, so tov_in_jiffies
    is zero and the timer expire for retire_blk_timer is turn to
    mod_timer(&pkc->retire_blk_timer, jiffies + 0),
    which will trigger cpu usage of softirq is 100%.
    
    Fixes: f6fb8f100b80 ("af-packet: TPACKET_V3 flexible buffer implementation.")
    Tested-by: Xiao Jiangfeng <xiaojiangfeng@huawei.com>
    Signed-off-by: Mao Wenan <maowenan@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 730a4bbfab2a7a642c663ba4a5d12d0a24e3ea05
Author: Eric Dumazet <edumazet@google.com>
Date:   Sat Dec 7 14:10:34 2019 -0800

    bonding: fix bond_neigh_init()
    
    commit 9e99bfefdbce2e23ef37487a3bcb4adf90a791d1 upstream.
    
    1) syzbot reported an uninit-value in bond_neigh_setup() [1]
    
     bond_neigh_setup() uses a temporary on-stack 'struct neigh_parms parms',
     but only clears parms.neigh_setup field.
    
     A stacked bonding device would then enter bond_neigh_setup()
     and read garbage from parms->dev.
    
     If we get really unlucky and garbage is matching @dev, then we
     could recurse and eventually crash.
    
     Let's make sure the whole structure is cleared to avoid surprises.
    
    2) bond_neigh_setup() can be called while another cpu manipulates
     the master device, removing or adding a slave.
     We need at least rcu protection to prevent use-after-free.
    
    Note: Prior code does not support a stack of bonding devices,
          this patch does not attempt to fix this, and leave a comment instead.
    
    [1]
    
    BUG: KMSAN: uninit-value in bond_neigh_setup+0xa4/0x110 drivers/net/bonding/bond_main.c:3655
    CPU: 0 PID: 11256 Comm: syz-executor.0 Not tainted 5.4.0-rc8-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Call Trace:
     <IRQ>
     __dump_stack lib/dump_stack.c:77 [inline]
     dump_stack+0x1c9/0x220 lib/dump_stack.c:118
     kmsan_report+0x128/0x220 mm/kmsan/kmsan_report.c:108
     __msan_warning+0x57/0xa0 mm/kmsan/kmsan_instr.c:245
     bond_neigh_setup+0xa4/0x110 drivers/net/bonding/bond_main.c:3655
     bond_neigh_init+0x216/0x4b0 drivers/net/bonding/bond_main.c:3626
     ___neigh_create+0x169e/0x2c40 net/core/neighbour.c:613
     __neigh_create+0xbd/0xd0 net/core/neighbour.c:674
     ip6_finish_output2+0x149a/0x2670 net/ipv6/ip6_output.c:113
     __ip6_finish_output+0x83d/0x8f0 net/ipv6/ip6_output.c:142
     ip6_finish_output+0x2db/0x420 net/ipv6/ip6_output.c:152
     NF_HOOK_COND include/linux/netfilter.h:294 [inline]
     ip6_output+0x5d3/0x720 net/ipv6/ip6_output.c:175
     dst_output include/net/dst.h:436 [inline]
     NF_HOOK include/linux/netfilter.h:305 [inline]
     mld_sendpack+0xebd/0x13d0 net/ipv6/mcast.c:1682
     mld_send_cr net/ipv6/mcast.c:1978 [inline]
     mld_ifc_timer_expire+0x116b/0x1680 net/ipv6/mcast.c:2477
     call_timer_fn+0x232/0x530 kernel/time/timer.c:1404
     expire_timers kernel/time/timer.c:1449 [inline]
     __run_timers+0xd60/0x1270 kernel/time/timer.c:1773
     run_timer_softirq+0x2d/0x50 kernel/time/timer.c:1786
     __do_softirq+0x4a1/0x83a kernel/softirq.c:293
     invoke_softirq kernel/softirq.c:375 [inline]
     irq_exit+0x230/0x280 kernel/softirq.c:416
     exiting_irq+0xe/0x10 arch/x86/include/asm/apic.h:536
     smp_apic_timer_interrupt+0x48/0x70 arch/x86/kernel/apic/apic.c:1138
     apic_timer_interrupt+0x2e/0x40 arch/x86/entry/entry_64.S:835
     </IRQ>
    RIP: 0010:kmsan_free_page+0x18d/0x1c0 mm/kmsan/kmsan_shadow.c:439
    Code: 4c 89 ff 44 89 f6 e8 82 0d ee ff 65 ff 0d 9f 26 3b 60 65 8b 05 98 26 3b 60 85 c0 75 24 e8 5b f6 35 ff 4c 89 6d d0 ff 75 d0 9d <48> 83 c4 10 5b 41 5c 41 5d 41 5e 41 5f 5d c3 0f 0b 0f 0b 0f 0b 0f
    RSP: 0018:ffffb328034af818 EFLAGS: 00000246 ORIG_RAX: ffffffffffffff13
    RAX: 0000000000000000 RBX: ffffe2d7471f8360 RCX: 0000000000000000
    RDX: ffffffffadea7000 RSI: 0000000000000004 RDI: ffff93496fcda104
    RBP: ffffb328034af850 R08: ffff934a47e86d00 R09: ffff93496fc41900
    R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000001
    R13: 0000000000000246 R14: 0000000000000000 R15: ffffe2d7472225c0
     free_pages_prepare mm/page_alloc.c:1138 [inline]
     free_pcp_prepare mm/page_alloc.c:1230 [inline]
     free_unref_page_prepare+0x1d9/0x770 mm/page_alloc.c:3025
     free_unref_page mm/page_alloc.c:3074 [inline]
     free_the_page mm/page_alloc.c:4832 [inline]
     __free_pages+0x154/0x230 mm/page_alloc.c:4840
     __vunmap+0xdac/0xf20 mm/vmalloc.c:2277
     __vfree mm/vmalloc.c:2325 [inline]
     vfree+0x7c/0x170 mm/vmalloc.c:2355
     copy_entries_to_user net/ipv6/netfilter/ip6_tables.c:883 [inline]
     get_entries net/ipv6/netfilter/ip6_tables.c:1041 [inline]
     do_ip6t_get_ctl+0xfa4/0x1030 net/ipv6/netfilter/ip6_tables.c:1709
     nf_sockopt net/netfilter/nf_sockopt.c:104 [inline]
     nf_getsockopt+0x481/0x4e0 net/netfilter/nf_sockopt.c:122
     ipv6_getsockopt+0x264/0x510 net/ipv6/ipv6_sockglue.c:1400
     tcp_getsockopt+0x1c6/0x1f0 net/ipv4/tcp.c:3688
     sock_common_getsockopt+0x13f/0x180 net/core/sock.c:3110
     __sys_getsockopt+0x533/0x7b0 net/socket.c:2129
     __do_sys_getsockopt net/socket.c:2144 [inline]
     __se_sys_getsockopt+0xe1/0x100 net/socket.c:2141
     __x64_sys_getsockopt+0x62/0x80 net/socket.c:2141
     do_syscall_64+0xb6/0x160 arch/x86/entry/common.c:291
     entry_SYSCALL_64_after_hwframe+0x44/0xa9
    RIP: 0033:0x45d20a
    Code: b8 34 01 00 00 0f 05 48 3d 01 f0 ff ff 0f 83 8d 8b fb ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 49 89 ca b8 37 00 00 00 0f 05 <48> 3d 01 f0 ff ff 0f 83 6a 8b fb ff c3 66 0f 1f 84 00 00 00 00 00
    RSP: 002b:0000000000a6f618 EFLAGS: 00000212 ORIG_RAX: 0000000000000037
    RAX: ffffffffffffffda RBX: 0000000000a6f640 RCX: 000000000045d20a
    RDX: 0000000000000041 RSI: 0000000000000029 RDI: 0000000000000003
    RBP: 0000000000717cc0 R08: 0000000000a6f63c R09: 0000000000004000
    R10: 0000000000a6f740 R11: 0000000000000212 R12: 0000000000000003
    R13: 0000000000000000 R14: 0000000000000029 R15: 0000000000715b00
    
    Local variable description: ----parms@bond_neigh_init
    Variable was created at:
     bond_neigh_init+0x8c/0x4b0 drivers/net/bonding/bond_main.c:3617
     bond_neigh_init+0x8c/0x4b0 drivers/net/bonding/bond_main.c:3617
    
    Fixes: 9918d5bf329d ("bonding: modify only neigh_parms owned by us")
    Fixes: 234bcf8a499e ("net/bonding: correctly proxy slave neigh param setup ndo function")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Cc: Jay Vosburgh <j.vosburgh@gmail.com>
    Cc: Veaceslav Falico <vfalico@gmail.com>
    Cc: Andy Gospodarek <andy@greyhouse.net>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7ac6e0bec8ace91cac3ce0ba0e01a7e8f9efc714
Author: Eric Dumazet <edumazet@google.com>
Date:   Sat Dec 7 12:23:21 2019 -0800

    neighbour: remove neigh_cleanup() method
    
    commit f394722fb0d0f701119368959d7cd0ecbc46363a upstream.
    
    neigh_cleanup() has not been used for seven years, and was a wrong design.
    
    Messing with shared pointer in bond_neigh_init() without proper
    memory barriers would at least trigger syzbot complains eventually.
    
    It is time to remove this stuff.
    
    Fixes: b63b70d87741 ("IPoIB: Use a private hash table for path lookup in xmit path")
    Signed-off-by: Eric Dumazet <edumazet@google.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 e0b22441105eaa339cdd24ef0bf16ff62a59a7a8
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Wed Nov 27 10:59:19 2019 +0100

    gpio: Fix error message on out-of-range GPIO in lookup table
    
    commit d935bd50dd14a7714cbdba9a76435dbb56edb1ae upstream.
    
    When a GPIO offset in a lookup table is out-of-range, the printed error
    message (1) does not include the actual out-of-range value, and (2)
    contains an off-by-one error in the upper bound.
    
    Avoid user confusion by also printing the actual GPIO offset, and
    correcting the upper bound of the range.
    While at it, use "%u" for unsigned int.
    
    Sample impact:
    
        -requested GPIO 0 is out of range [0..32] for chip e6052000.gpio
        +requested GPIO 0 (45) is out of range [0..31] for chip e6052000.gpio
    
    Fixes: 2a3cf6a3599e9015 ("gpiolib: return -ENOENT if no GPIO mapping exists")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/20191127095919.4214-1-geert+renesas@glider.be
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5113ebdbf286156689d2d55efb0588bebc6c3dcf
Author: Marcel Holtmann <marcel@holtmann.org>
Date:   Wed Dec 4 03:43:55 2019 +0100

    HID: uhid: Fix returning EPOLLOUT from uhid_char_poll
    
    commit be54e7461ffdc5809b67d2aeefc1ddc9a91470c7 upstream.
    
    Always return EPOLLOUT from uhid_char_poll to allow polling /dev/uhid
    for writable state.
    
    Fixes: 1f9dec1e0164 ("HID: uhid: allow poll()'ing on uhid devices")
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    [bwh: Backported to 3.16: s/EPOLL/POLL/g]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3eb2ce0b1602c7eca71ba91148ed97d1bfc51ef7
Author: Eric Dumazet <edumazet@google.com>
Date:   Sat Dec 7 14:43:39 2019 -0800

    netfilter: bridge: make sure to pull arp header in br_nf_forward_arp()
    
    commit 5604285839aaedfb23ebe297799c6e558939334d upstream.
    
    syzbot is kind enough to remind us we need to call skb_may_pull()
    
    BUG: KMSAN: uninit-value in br_nf_forward_arp+0xe61/0x1230 net/bridge/br_netfilter_hooks.c:665
    CPU: 1 PID: 11631 Comm: syz-executor.1 Not tainted 5.4.0-rc8-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Call Trace:
     <IRQ>
     __dump_stack lib/dump_stack.c:77 [inline]
     dump_stack+0x1c9/0x220 lib/dump_stack.c:118
     kmsan_report+0x128/0x220 mm/kmsan/kmsan_report.c:108
     __msan_warning+0x64/0xc0 mm/kmsan/kmsan_instr.c:245
     br_nf_forward_arp+0xe61/0x1230 net/bridge/br_netfilter_hooks.c:665
     nf_hook_entry_hookfn include/linux/netfilter.h:135 [inline]
     nf_hook_slow+0x18b/0x3f0 net/netfilter/core.c:512
     nf_hook include/linux/netfilter.h:260 [inline]
     NF_HOOK include/linux/netfilter.h:303 [inline]
     __br_forward+0x78f/0xe30 net/bridge/br_forward.c:109
     br_flood+0xef0/0xfe0 net/bridge/br_forward.c:234
     br_handle_frame_finish+0x1a77/0x1c20 net/bridge/br_input.c:162
     nf_hook_bridge_pre net/bridge/br_input.c:245 [inline]
     br_handle_frame+0xfb6/0x1eb0 net/bridge/br_input.c:348
     __netif_receive_skb_core+0x20b9/0x51a0 net/core/dev.c:4830
     __netif_receive_skb_one_core net/core/dev.c:4927 [inline]
     __netif_receive_skb net/core/dev.c:5043 [inline]
     process_backlog+0x610/0x13c0 net/core/dev.c:5874
     napi_poll net/core/dev.c:6311 [inline]
     net_rx_action+0x7a6/0x1aa0 net/core/dev.c:6379
     __do_softirq+0x4a1/0x83a kernel/softirq.c:293
     do_softirq_own_stack+0x49/0x80 arch/x86/entry/entry_64.S:1091
     </IRQ>
     do_softirq kernel/softirq.c:338 [inline]
     __local_bh_enable_ip+0x184/0x1d0 kernel/softirq.c:190
     local_bh_enable+0x36/0x40 include/linux/bottom_half.h:32
     rcu_read_unlock_bh include/linux/rcupdate.h:688 [inline]
     __dev_queue_xmit+0x38e8/0x4200 net/core/dev.c:3819
     dev_queue_xmit+0x4b/0x60 net/core/dev.c:3825
     packet_snd net/packet/af_packet.c:2959 [inline]
     packet_sendmsg+0x8234/0x9100 net/packet/af_packet.c:2984
     sock_sendmsg_nosec net/socket.c:637 [inline]
     sock_sendmsg net/socket.c:657 [inline]
     __sys_sendto+0xc44/0xc70 net/socket.c:1952
     __do_sys_sendto net/socket.c:1964 [inline]
     __se_sys_sendto+0x107/0x130 net/socket.c:1960
     __x64_sys_sendto+0x6e/0x90 net/socket.c:1960
     do_syscall_64+0xb6/0x160 arch/x86/entry/common.c:291
     entry_SYSCALL_64_after_hwframe+0x44/0xa9
    RIP: 0033:0x45a679
    Code: ad b6 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 7b b6 fb ff c3 66 2e 0f 1f 84 00 00 00 00
    RSP: 002b:00007f0a3c9e5c78 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
    RAX: ffffffffffffffda RBX: 0000000000000006 RCX: 000000000045a679
    RDX: 000000000000000e RSI: 0000000020000200 RDI: 0000000000000003
    RBP: 000000000075bf20 R08: 00000000200000c0 R09: 0000000000000014
    R10: 0000000000000000 R11: 0000000000000246 R12: 00007f0a3c9e66d4
    R13: 00000000004c8ec1 R14: 00000000004dfe28 R15: 00000000ffffffff
    
    Uninit was created at:
     kmsan_save_stack_with_flags mm/kmsan/kmsan.c:149 [inline]
     kmsan_internal_poison_shadow+0x5c/0x110 mm/kmsan/kmsan.c:132
     kmsan_slab_alloc+0x97/0x100 mm/kmsan/kmsan_hooks.c:86
     slab_alloc_node mm/slub.c:2773 [inline]
     __kmalloc_node_track_caller+0xe27/0x11a0 mm/slub.c:4381
     __kmalloc_reserve net/core/skbuff.c:141 [inline]
     __alloc_skb+0x306/0xa10 net/core/skbuff.c:209
     alloc_skb include/linux/skbuff.h:1049 [inline]
     alloc_skb_with_frags+0x18c/0xa80 net/core/skbuff.c:5662
     sock_alloc_send_pskb+0xafd/0x10a0 net/core/sock.c:2244
     packet_alloc_skb net/packet/af_packet.c:2807 [inline]
     packet_snd net/packet/af_packet.c:2902 [inline]
     packet_sendmsg+0x63a6/0x9100 net/packet/af_packet.c:2984
     sock_sendmsg_nosec net/socket.c:637 [inline]
     sock_sendmsg net/socket.c:657 [inline]
     __sys_sendto+0xc44/0xc70 net/socket.c:1952
     __do_sys_sendto net/socket.c:1964 [inline]
     __se_sys_sendto+0x107/0x130 net/socket.c:1960
     __x64_sys_sendto+0x6e/0x90 net/socket.c:1960
     do_syscall_64+0xb6/0x160 arch/x86/entry/common.c:291
     entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Fixes: c4e70a87d975 ("netfilter: bridge: rename br_netfilter.c to br_netfilter_hooks.c")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    [bwh: Backported to 3.16: adjust filename]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e73728f52871c41cb20efd6c4e60571769900cba
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Fri Dec 6 22:09:14 2019 +0100

    netfilter: nf_tables: validate NFT_DATA_VALUE after nft_data_init()
    
    commit 0d2c96af797ba149e559c5875c0151384ab6dd14 upstream.
    
    Userspace might bogusly sent NFT_DATA_VERDICT in several netlink
    attributes that assume NFT_DATA_VALUE. Moreover, make sure that error
    path invokes nft_data_release() to decrement the reference count on the
    chain object.
    
    Fixes: 96518518cc41 ("netfilter: add nftables")
    Fixes: 0f3cd9b36977 ("netfilter: nf_tables: add range expression")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    [bwh: Backported to 3.16:
     - Drop changes in nft_get_set_elem(), nft_range
     - Call nft_data_uninit() instead of nft_data_release()
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5e75180078e10a32c88b87a00b4616a51b754845
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Mon May 15 11:17:29 2017 +0100

    netfilter: nf_tables: missing sanitization in data from userspace
    
    commit 71df14b0ce094be46d105b5a3ededd83b8e779a0 upstream.
    
    Do not assume userspace always sends us NFT_DATA_VALUE for bitwise and
    cmp expressions. Although NFT_DATA_VERDICT does not make any sense, it
    is still possible to handcraft a netlink message using this incorrect
    data type.
    
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 1ee34086f52a84fdae455f0a63d73e05046d3170
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Tue Nov 19 16:46:41 2019 +0100

    pinctrl: baytrail: Really serialize all register accesses
    
    commit 40ecab551232972a39cdd8b6f17ede54a3fdb296 upstream.
    
    Commit 39ce8150a079 ("pinctrl: baytrail: Serialize all register access")
    added a spinlock around all register accesses because:
    
    "There is a hardware issue in Intel Baytrail where concurrent GPIO register
     access might result reads of 0xffffffff and writes might get dropped
     completely."
    
    Testing has shown that this does not catch all cases, there are still
    2 problems remaining
    
    1) The original fix uses a spinlock per byt_gpio device / struct,
    additional testing has shown that this is not sufficient concurent
    accesses to 2 different GPIO banks also suffer from the same problem.
    
    This commit fixes this by moving to a single global lock.
    
    2) The original fix did not add a lock around the register accesses in
    the suspend/resume handling.
    
    Since pinctrl-baytrail.c is using normal suspend/resume handlers,
    interrupts are still enabled during suspend/resume handling. Nothing
    should be using the GPIOs when they are being taken down, _but_ the
    GPIOs themselves may still cause interrupts, which are likely to
    use (read) the triggering GPIO. So we need to protect against
    concurrent GPIO register accesses in the suspend/resume handlers too.
    
    This commit fixes this by adding the missing spin_lock / unlock calls.
    
    The 2 fixes together fix the Acer Switch 10 SW5-012 getting completely
    confused after a suspend resume. The DSDT for this device has a bug
    in its _LID method which reprograms the home and power button trigger-
    flags requesting both high and low _level_ interrupts so the IRQs for
    these 2 GPIOs continuously fire. This combined with the saving of
    registers during suspend, triggers concurrent GPIO register accesses
    resulting in saving 0xffffffff as pconf0 value during suspend and then
    when restoring this on resume the pinmux settings get all messed up,
    resulting in various I2C busses being stuck, the wifi no longer working
    and often the tablet simply not coming out of suspend at all.
    
    Fixes: 39ce8150a079 ("pinctrl: baytrail: Serialize all register access")
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    [bwh: Backported to 3.16:
     - Drop changes in functions that don't exist here
     - Delete local pointers to byt_gpio that become unused
     - Adjust filename, context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 1902fdbab1460fd245cc5c4565104feba8ebec4a
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Tue Aug 4 15:03:14 2015 +0300

    pinctrl: baytrail: Serialize all register access
    
    commit 39ce8150a079e3ae6ed9abf26d7918a558ef7c19 upstream.
    
    There is a hardware issue in Intel Baytrail where concurrent GPIO register
    access might result reads of 0xffffffff and writes might get dropped
    completely.
    
    Prevent this from happening by taking the serializing lock in all places
    where it is possible that more than one thread might be accessing the
    hardware concurrently.
    
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    [bwh: Backported to 3.16: adjust filename]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a7f9780de392bf94a7445963fd9937cebcd392dc
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Mon Feb 23 14:53:12 2015 +0200

    pinctrl: baytrail: Rework interrupt handling
    
    commit 31e4329f99062a06dca5a493bb4495a63b2dc6ba upstream.
    
    Instead of handling everything in the driver's first level interrupt
    handler, we can take advantage of already existing flow handlers that are
    provided by the IRQ core.
    
    This changes the functionality a bit also. Previously the driver looped
    over pending interrupts in a single loop, restarting the loop if some
    interrupt changed state. This caused problem with Lenovo Thinkpad 10
    digitizer that it was not able to deassert the interrupt before the driver
    disabled the interrupt for good (looplimit was exhausted).
    
    Rework the interrupt handling logic a bit so that we provide proper mask,
    ack and unmask operations in terms of Baytrail GPIO hardware and loop over
    pending interrupts only once. If the interrupt remains asserted the first
    level handler will be re-triggered automatically.
    
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    [bwh: Backported to 3.16 as dependency of commit 39ce8150a079
     "pinctrl: baytrail: Serialize all register access":
     - Adjust filename, context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit ac52ab18dc9548e3273c36c078d9cc2e6646740f
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Mon Feb 23 14:53:11 2015 +0200

    pinctrl: baytrail: Clear interrupt triggering from pins that are in GPIO mode
    
    commit 95f0972c7e4cbf3fc68160131c5ac2f033481d00 upstream.
    
    If the pin is already configured as GPIO and it has any of the triggering
    flags set, we may get spurious interrupts depending on the state of the
    pin.
    
    Prevent this by clearing the triggering flags on such pins. However, if the
    pin is also configured as "direct IRQ" we leave the flags as is. Otherwise
    it will prevent interrupts that are routed directly to IO-APIC.
    
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    [bwh: Backported to 3.16:
     - Add definition of BYT_DIRECT_IRQ_EN
     - Adjust filename]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d2a0a4a92eb80a23cc6a8188c7114c136c5e5994
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Mon Feb 23 14:53:10 2015 +0200

    pinctrl: baytrail: Relax GPIO request rules
    
    commit f8323b6bb2cc7d26941d4838dd4375952980a88a upstream.
    
    Zotac ZBOX PI320, a Baytrail based mini-PC, has power button connected to a
    GPIO pin and it is exposed to the operating system as Windows 8 button
    array. This is implemented in Linux as a driver using gpio_keys.
    
    However, BIOS on this particula machine forgot to mux the pin to be a GPIO
    instead of native function, which results following message to be seen on
    the console:
    
     byt_gpio INT33FC:02: pin 16 cannot be used as GPIO.
    
    This causes power button to not work as the driver was not able to request
    the GPIO it needs.
    
    So instead of completely preventing this we allow turning the pin as GPIO
    but issue warning that something might be wrong.
    
    Reported-by: Benjamin Adler <benadler@gmx.net>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    [bwh: Backported to 3.16: adjust filename]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 4a4c89329e41327cc6684d5408f06f5e39e50eb5
Author: Nikos Tsironis <ntsironis@arrikto.com>
Date:   Wed Dec 4 16:07:41 2019 +0200

    dm thin metadata: Add support for a pre-commit callback
    
    commit ecda7c0280e6b3398459dc589b9a41c1adb45529 upstream.
    
    Add support for one pre-commit callback which is run right before the
    metadata are committed.
    
    This allows the thin provisioning target to run a callback before the
    metadata are committed and is required by the next commit.
    
    Signed-off-by: Nikos Tsironis <ntsironis@arrikto.com>
    Acked-by: Joe Thornber <ejt@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    [bwh: Backported to 3.16:
     - Open-code pmd_write_{lock_in_core,unlock}()
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit fd06194fd9ada7744f02a3ff466a6f5afcf55863
Author: Hou Tao <houtao1@huawei.com>
Date:   Tue Dec 3 19:42:58 2019 +0800

    dm btree: increase rebalance threshold in __rebalance2()
    
    commit 474e559567fa631dea8fb8407ab1b6090c903755 upstream.
    
    We got the following warnings from thin_check during thin-pool setup:
    
      $ thin_check /dev/vdb
      examining superblock
      examining devices tree
        missing devices: [1, 84]
          too few entries in btree_node: 41, expected at least 42 (block 138, max_entries = 126)
      examining mapping tree
    
    The phenomenon is the number of entries in one node of details_info tree is
    less than (max_entries / 3). And it can be easily reproduced by the following
    procedures:
    
      $ new a thin pool
      $ presume the max entries of details_info tree is 126
      $ new 127 thin devices (e.g. 1~127) to make the root node being full
        and then split
      $ remove the first 43 (e.g. 1~43) thin devices to make the children
        reblance repeatedly
      $ stop the thin pool
      $ thin_check
    
    The root cause is that the B-tree removal procedure in __rebalance2()
    doesn't guarantee the invariance: the minimal number of entries in
    non-root node should be >= (max_entries / 3).
    
    Simply fix the problem by increasing the rebalance threshold to
    make sure the number of entries in each child will be greater
    than or equal to (max_entries / 3 + 1), so no matter which
    child is used for removal, the number will still be valid.
    
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Acked-by: Joe Thornber <ejt@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7162b3171ee166a9c91046e1bd5885210dbab943
Author: Christian Brauner <christian.brauner@ubuntu.com>
Date:   Wed Oct 9 13:48:09 2019 +0200

    taskstats: fix data-race
    
    commit 0b8d616fb5a8ffa307b1d3af37f55c15dae14f28 upstream.
    
    When assiging and testing taskstats in taskstats_exit() there's a race
    when setting up and reading sig->stats when a thread-group with more
    than one thread exits:
    
    write to 0xffff8881157bbe10 of 8 bytes by task 7951 on cpu 0:
     taskstats_tgid_alloc kernel/taskstats.c:567 [inline]
     taskstats_exit+0x6b7/0x717 kernel/taskstats.c:596
     do_exit+0x2c2/0x18e0 kernel/exit.c:864
     do_group_exit+0xb4/0x1c0 kernel/exit.c:983
     get_signal+0x2a2/0x1320 kernel/signal.c:2734
     do_signal+0x3b/0xc00 arch/x86/kernel/signal.c:815
     exit_to_usermode_loop+0x250/0x2c0 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+0x2d7/0x2f0 arch/x86/entry/common.c:299
     entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    read to 0xffff8881157bbe10 of 8 bytes by task 7949 on cpu 1:
     taskstats_tgid_alloc kernel/taskstats.c:559 [inline]
     taskstats_exit+0xb2/0x717 kernel/taskstats.c:596
     do_exit+0x2c2/0x18e0 kernel/exit.c:864
     do_group_exit+0xb4/0x1c0 kernel/exit.c:983
     __do_sys_exit_group kernel/exit.c:994 [inline]
     __se_sys_exit_group kernel/exit.c:992 [inline]
     __x64_sys_exit_group+0x2e/0x30 kernel/exit.c:992
     do_syscall_64+0xcf/0x2f0 arch/x86/entry/common.c:296
     entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Fix this by using smp_load_acquire() and smp_store_release().
    
    Reported-by: syzbot+c5d03165a1bd1dead0c1@syzkaller.appspotmail.com
    Fixes: 34ec12349c8a ("taskstats: cleanup ->signal->stats allocation")
    Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
    Acked-by: Marco Elver <elver@google.com>
    Reviewed-by: Will Deacon <will@kernel.org>
    Reviewed-by: Andrea Parri <parri.andrea@gmail.com>
    Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
    Link: https://lore.kernel.org/r/20191009114809.8643-1-christian.brauner@ubuntu.com
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b332a392d32bb30f683a73bcd2d4eceb249cf0d5
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Nov 15 12:39:23 2019 +0100

    netfilter: ctnetlink: netns exit must wait for callbacks
    
    commit 18a110b022a5c02e7dc9f6109d0bd93e58ac6ebb upstream.
    
    Curtis Taylor and Jon Maxwell reported and debugged a crash on 3.10
    based kernel.
    
    Crash occurs in ctnetlink_conntrack_events because net->nfnl socket is
    NULL.  The nfnl socket was set to NULL by netns destruction running on
    another cpu.
    
    The exiting network namespace calls the relevant destructors in the
    following order:
    
    1. ctnetlink_net_exit_batch
    
    This nulls out the event callback pointer in struct netns.
    
    2. nfnetlink_net_exit_batch
    
    This nulls net->nfnl socket and frees it.
    
    3. nf_conntrack_cleanup_net_list
    
    This removes all remaining conntrack entries.
    
    This is order is correct. The only explanation for the crash so ar is:
    
    cpu1: conntrack is dying, eviction occurs:
     -> nf_ct_delete()
       -> nf_conntrack_event_report \
         -> nf_conntrack_eventmask_report
           -> notify->fcn() (== ctnetlink_conntrack_events).
    
    cpu1: a. fetches rcu protected pointer to obtain ctnetlink event callback.
          b. gets interrupted.
     cpu2: runs netns exit handlers:
         a runs ctnetlink destructor, event cb pointer set to NULL.
         b runs nfnetlink destructor, nfnl socket is closed and set to NULL.
    cpu1: c. resumes and trips over NULL net->nfnl.
    
    Problem appears to be that ctnetlink_net_exit_batch only prevents future
    callers of nf_conntrack_eventmask_report() from obtaining the callback.
    It doesn't wait of other cpus that might have already obtained the
    callbacks address.
    
    I don't see anything in upstream kernels that would prevent similar
    crash: We need to wait for all cpus to have exited the event callback.
    
    Fixes: 9592a5c01e79dbc59eb56fa ("netfilter: ctnetlink: netns support")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3e53ad8e01677b5527b93d30dfe9d56b85aa9250
Author: Sven Eckelmann <sven@narfation.org>
Date:   Thu Nov 28 12:25:45 2019 +0100

    batman-adv: Fix DAT candidate selection on little endian systems
    
    commit 4cc4a1708903f404d2ca0dfde30e71e052c6cbc9 upstream.
    
    The distributed arp table is using a DHT to store and retrieve MAC address
    information for an IP address. This is done using unicast messages to
    selected peers. The potential peers are looked up using the IP address and
    the VID.
    
    While the IP address is always stored in big endian byte order, this is not
    the case of the VID. It can (depending on the host system) either be big
    endian or little endian. The host must therefore always convert it to big
    endian to ensure that all devices calculate the same peers for the same
    lookup data.
    
    Fixes: be1db4f6615b ("batman-adv: make the Distributed ARP Table vlan aware")
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 311801e5d56bcb01b3bab988d9ac4aac38bea199
Author: Pavel Tatashin <pasha.tatashin@oracle.com>
Date:   Fri Jan 12 15:00:02 2018 -0500

    x86/pti/efi: broken conversion from efi to kernel page table
    
    In entry_64.S we have code like this:
    
        /* Unconditionally use kernel CR3 for do_nmi() */
        /* %rax is saved above, so OK to clobber here */
        ALTERNATIVE "jmp 2f", "movq %cr3, %rax", X86_FEATURE_KAISER
        /* If PCID enabled, NOFLUSH now and NOFLUSH on return */
        ALTERNATIVE "", "bts $63, %rax", X86_FEATURE_PCID
        pushq   %rax
        /* mask off "user" bit of pgd address and 12 PCID bits: */
        andq    $(~(X86_CR3_PCID_ASID_MASK | KAISER_SHADOW_PGD_OFFSET)), %rax
        movq    %rax, %cr3
    2:
    
        /* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */
        call    do_nmi
    
    With this instruction:
        andq    $(~(X86_CR3_PCID_ASID_MASK | KAISER_SHADOW_PGD_OFFSET)), %rax
    
    We unconditionally switch from whatever our CR3 was to kernel page table.
    But, in arch/x86/platform/efi/efi_64.c We temporarily set a different page
    table, that does not have the kernel page table with 0x1000 offset from it.
    
    Look in efi_thunk() and efi_thunk_set_virtual_address_map().
    
    So, while CR3 points to the other page table, we get an NMI interrupt,
    and clear 0x1000 from CR3, resulting in a bogus CR3 if the 0x1000 bit was
    set.
    
    The efi page table comes from realmode/rm/trampoline_64.S:
    
    arch/x86/realmode/rm/trampoline_64.S
    
    141 .bss
    142 .balign PAGE_SIZE
    143 GLOBAL(trampoline_pgd) .space PAGE_SIZE
    
    Notice: alignment is PAGE_SIZE, so after applying KAISER_SHADOW_PGD_OFFSET
    which equal to PAGE_SIZE, we can get a different page table.
    
    But, even if we fix alignment, here the trampoline binary is later copied
    into dynamically allocated memory in reserve_real_mode(), so we need to
    fix that place as well.
    
    Fixes: f9a1666f97b3 ("KAISER: Kernel Address Isolation")
    Signed-off-by: Pavel Tatashin <pasha.tatashin@oracle.com>
    Reviewed-by: Steven Sistare <steven.sistare@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Adjust the Fixes field for 3.16]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 30f2093f85b5eab51c3956969c2d2fce68e5e165
Author: Goldwyn Rodrigues <rgoldwyn@suse.com>
Date:   Sun Dec 3 21:14:12 2017 -0600

    dm flakey: check for null arg_name in parse_features()
    
    commit 7690e25302dc7d0cd42b349e746fe44b44a94f2b upstream.
    
    One can crash dm-flakey by specifying more feature arguments than the
    number of features supplied.  Checking for null in arg_name avoids
    this.
    
    dmsetup create flakey-test --table "0 66076080 flakey /dev/sdb9 0 0 180 2 drop_writes"
    
    Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 9b322224dbd3db191718b6b6e74c845bc593f211
Author: Mike Snitzer <snitzer@redhat.com>
Date:   Wed Aug 24 21:12:58 2016 -0400

    dm flakey: fix reads to be issued if drop_writes configured
    
    commit 299f6230bc6d0ccd5f95bb0fb865d80a9c7d5ccc upstream.
    
    v4.8-rc3 commit 99f3c90d0d ("dm flakey: error READ bios during the
    down_interval") overlooked the 'drop_writes' feature, which is meant to
    allow reads to be issued rather than errored, during the down_interval.
    
    Fixes: 99f3c90d0d ("dm flakey: error READ bios during the down_interval")
    Reported-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 17d9811a3075ca8527a2375ca2d597515c2ebef1
Author: Wei Yongjun <weiyj.lk@gmail.com>
Date:   Mon Aug 8 14:09:27 2016 +0000

    dm flakey: return -EINVAL on interval bounds error in flakey_ctr()
    
    commit bff7e067ee518f9ed7e1cbc63e4c9e01670d0b71 upstream.
    
    Fix to return error code -EINVAL instead of 0, as is done elsewhere in
    this function.
    
    Fixes: e80d1c805a3b ("dm: do not override error code returned from dm_get_device()")
    Signed-off-by: Wei Yongjun <weiyj.lk@gmail.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit dcce238546178d6c21762667276a61dd5496bb83
Author: Vivek Goyal <vgoyal@redhat.com>
Date:   Fri Jul 31 09:20:36 2015 -0400

    dm: do not override error code returned from dm_get_device()
    
    commit e80d1c805a3b2f0ad2081369be5dc5deedd5ee59 upstream.
    
    Some of the device mapper targets override the error code returned by
    dm_get_device() and return either -EINVAL or -ENXIO.  There is nothing
    gained by this override.  It is better to propagate the returned error
    code unchanged to caller.
    
    This work was motivated by hitting an issue where the underlying device
    was busy but -EINVAL was being returned.  After this change we get
    -EBUSY instead and it is easier to figure out the problem.
    
    Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    [bwh: Backported to 3.16: drop changes to dm-log-writes]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 85a0e75094f2eb88955e66da20453098684968a2
Author: Johannes Thumshirn <jthumshirn@suse.de>
Date:   Mon Feb 18 11:28:37 2019 +0100

    btrfs: ensure that a DUP or RAID1 block group has exactly two stripes
    
    commit 349ae63f40638a28c6fce52e8447c2d14b84cc0c upstream.
    
    We recently had a customer issue with a corrupted filesystem. When
    trying to mount this image btrfs panicked with a division by zero in
    calc_stripe_length().
    
    The corrupt chunk had a 'num_stripes' value of 1. calc_stripe_length()
    takes this value and divides it by the number of copies the RAID profile
    is expected to have to calculate the amount of data stripes. As a DUP
    profile is expected to have 2 copies this division resulted in 1/2 = 0.
    Later then the 'data_stripes' variable is used as a divisor in the
    stripe length calculation which results in a division by 0 and thus a
    kernel panic.
    
    When encountering a filesystem with a DUP block group and a
    'num_stripes' value unequal to 2, refuse mounting as the image is
    corrupted and will lead to unexpected behaviour.
    
    Code inspection showed a RAID1 block group has the same issues.
    
    Fixes: e06cd3dd7cea ("Btrfs: add validadtion checks for chunk loading")
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
    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 584ce61fe6561de55d53b8951f7f914637cd1ae2
Author: Shaokun Zhang <zhangshaokun@hisilicon.com>
Date:   Mon Nov 5 18:49:09 2018 +0800

    btrfs: tree-checker: Fix misleading group system information
    
    commit 761333f2f50ccc887aa9957ae829300262c0d15b upstream.
    
    block_group_err shows the group system as a decimal value with a '0x'
    prefix, which is somewhat misleading.
    
    Fix it to print hexadecimal, as was intended.
    
    Fixes: fce466eab7ac6 ("btrfs: tree-checker: Verify block_group_item")
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Shaokun Zhang <zhangshaokun@hisilicon.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit c9d849a22580f6658cc93522604bc585360bcd05
Author: Qu Wenruo <wqu@suse.com>
Date:   Fri Sep 28 07:59:34 2018 +0800

    btrfs: tree-checker: Check level for leaves and nodes
    
    commit f556faa46eb4e96d0d0772e74ecf66781e132f72 upstream.
    
    Although we have tree level check at tree read runtime, it's completely
    based on its parent level.
    We still need to do accurate level check to avoid invalid tree blocks
    sneak into kernel space.
    
    The check itself is simple, for leaf its level should always be 0.
    For nodes its level should be in range [1, BTRFS_MAX_LEVEL - 1].
    
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: Su Yue <suy.fnst@cn.fujitsu.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4:
     - Pass root instead of fs_info to generic_err()
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b84f82bdb43676854de8c5196bd8738805b892ee
Author: Qu Wenruo <wqu@suse.com>
Date:   Wed Aug 1 10:37:17 2018 +0800

    btrfs: Verify that every chunk has corresponding block group at mount time
    
    commit 7ef49515fa6727cb4b6f2f5b0ffbc5fc20a9f8c6 upstream.
    
    If a crafted image has missing block group items, it could cause
    unexpected behavior and breaks the assumption of 1:1 chunk<->block group
    mapping.
    
    Although we have the block group -> chunk mapping check, we still need
    chunk -> block group mapping check.
    
    This patch will do extra check to ensure each chunk has its
    corresponding block group.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=199847
    Reported-by: Xu Wen <wen.xu@gatech.edu>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: Gu Jinxiang <gujx@cn.fujitsu.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4: adjust context]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5203a4d55c2c6a0c86a0ab21bfd071d407ca95a1
Author: Qu Wenruo <wqu@suse.com>
Date:   Wed Aug 1 10:37:16 2018 +0800

    btrfs: Check that each block group has corresponding chunk at mount time
    
    commit 514c7dca85a0bf40be984dab0b477403a6db901f upstream.
    
    A crafted btrfs image with incorrect chunk<->block group mapping will
    trigger a lot of unexpected things as the mapping is essential.
    
    Although the problem can be caught by block group item checker
    added in "btrfs: tree-checker: Verify block_group_item", it's still not
    sufficient.  A sufficiently valid block group item can pass the check
    added by the mentioned patch but could fail to match the existing chunk.
    
    This patch will add extra block group -> chunk mapping check, to ensure
    we have a completely matching (start, len, flags) chunk for each block
    group at mount time.
    
    Here we reuse the original helper find_first_block_group(), which is
    already doing the basic bg -> chunk checks, adding further checks of the
    start/len and type flags.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=199837
    Reported-by: Xu Wen <wen.xu@gatech.edu>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: Su Yue <suy.fnst@cn.fujitsu.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4: Use root->fs_info instead of fs_info]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit cdfef40f9557b91384c392a9150bf0bb2b3802c7
Author: Gu Jinxiang <gujx@cn.fujitsu.com>
Date:   Wed Jul 4 18:16:39 2018 +0800

    btrfs: validate type when reading a chunk
    
    commit 315409b0098fb2651d86553f0436b70502b29bb2 upstream.
    
    Reported in https://bugzilla.kernel.org/show_bug.cgi?id=199839, with an
    image that has an invalid chunk type but does not return an error.
    
    Add chunk type check in btrfs_check_chunk_valid, to detect the wrong
    type combinations.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=199839
    Reported-by: Xu Wen <wen.xu@gatech.edu>
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Gu Jinxiang <gujx@cn.fujitsu.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4: Use root->fs_info instead of fs_info]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e3f6c37c31522cc99cea96e0f0f6f536026fb058
Author: Qu Wenruo <wqu@suse.com>
Date:   Tue Jul 3 17:10:06 2018 +0800

    btrfs: tree-checker: Detect invalid and empty essential trees
    
    commit ba480dd4db9f1798541eb2d1c423fc95feee8d36 upstream.
    
    A crafted image has empty root tree block, which will later cause NULL
    pointer dereference.
    
    The following trees should never be empty:
    1) Tree root
       Must contain at least root items for extent tree, device tree and fs
       tree
    
    2) Chunk tree
       Or we can't even bootstrap as it contains the mapping.
    
    3) Fs tree
       At least inode item for top level inode (.).
    
    4) Device tree
       Dev extents for chunks
    
    5) Extent tree
       Must have corresponding extent for each chunk.
    
    If any of them is empty, we are sure the fs is corrupted and no need to
    mount it.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=199847
    Reported-by: Xu Wen <wen.xu@gatech.edu>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Tested-by: Gu Jinxiang <gujx@cn.fujitsu.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4: Pass root instead of fs_info to generic_err()]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit df8ecef7a35de12986676edc45fd841e6d788ba8
Author: Qu Wenruo <wqu@suse.com>
Date:   Tue Jul 3 17:10:05 2018 +0800

    btrfs: tree-checker: Verify block_group_item
    
    commit fce466eab7ac6baa9d2dcd88abcf945be3d4a089 upstream.
    
    A crafted image with invalid block group items could make free space cache
    code to cause panic.
    
    We could detect such invalid block group item by checking:
    1) Item size
       Known fixed value.
    2) Block group size (key.offset)
       We have an upper limit on block group item (10G)
    3) Chunk objectid
       Known fixed value.
    4) Type
       Only 4 valid type values, DATA, METADATA, SYSTEM and DATA|METADATA.
       No more than 1 bit set for profile type.
    5) Used space
       No more than the block group size.
    
    This should allow btrfs to detect and refuse to mount the crafted image.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=199849
    Reported-by: Xu Wen <wen.xu@gatech.edu>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: Gu Jinxiang <gujx@cn.fujitsu.com>
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Tested-by: Gu Jinxiang <gujx@cn.fujitsu.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4:
     - In check_leaf_item(), pass root->fs_info to check_block_group_item()
     - Include <linux/sizes.h> (in ctree.h, to match upstream)
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 56f41f306dde4ae8eabb7ead66cc52ddfdc1759e
Author: David Sterba <dsterba@suse.com>
Date:   Wed Jan 10 15:13:07 2018 +0100

    btrfs: tree-check: reduce stack consumption in check_dir_item
    
    commit e2683fc9d219430f5b78889b50cde7f40efeba7b upstream.
    
    I've noticed that the updated item checker stack consumption increased
    dramatically in 542f5385e20cf97447 ("btrfs: tree-checker: Add checker
    for dir item")
    
    tree-checker.c:check_leaf                    +552 (176 -> 728)
    
    The array is 255 bytes long, dynamic allocation would slow down the
    sanity checks so it's more reasonable to keep it on-stack. Moving the
    variable to the scope of use reduces the stack usage again
    
    tree-checker.c:check_leaf                    -264 (728 -> 464)
    
    Reviewed-by: Josef Bacik <jbacik@fb.com>
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d05dde14ec912a52e992b6d11b2a53b70e3c9840
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Dec 6 15:18:14 2017 +0100

    btrfs: tree-checker: use %zu format string for size_t
    
    commit 7cfad65297bfe0aa2996cd72d21c898aa84436d9 upstream.
    
    The return value of sizeof() is of type size_t, so we must print it
    using the %z format modifier rather than %l to avoid this warning
    on some architectures:
    
    fs/btrfs/tree-checker.c: In function 'check_dir_item':
    fs/btrfs/tree-checker.c:273:50: error: format '%lu' expects argument of type 'long unsigned int', but argument 5 has type 'u32' {aka 'unsigned int'} [-Werror=format=]
    
    Fixes: 005887f2e3e0 ("btrfs: tree-checker: Add checker for dir item")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a3f7b0e7f4a889478c56f2505748534c4a064930
Author: Qu Wenruo <wqu@suse.com>
Date:   Wed Nov 8 08:54:25 2017 +0800

    btrfs: tree-checker: Add checker for dir item
    
    commit ad7b0368f33cffe67fecd302028915926e50ef7e upstream.
    
    Add checker for dir item, for key types DIR_ITEM, DIR_INDEX and
    XATTR_ITEM.
    
    This checker does comprehensive checks for:
    
    1) dir_item header and its data size
       Against item boundary and maximum name/xattr length.
       This part is mostly the same as old verify_dir_item().
    
    2) dir_type
       Against maximum file types, and against key type.
       Since XATTR key should only have FT_XATTR dir item, and normal dir
       item type should not have XATTR key.
    
       The check between key->type and dir_type is newly introduced by this
       patch.
    
    3) name hash
       For XATTR and DIR_ITEM key, key->offset is name hash (crc32c).
       Check the hash of the name against the key to ensure it's correct.
    
       The name hash check is only found in btrfs-progs before this patch.
    
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: Su Yue <suy.fnst@cn.fujitsu.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4: BTRFS_MAX_XATTR_SIZE() takes a root instead of an
     fs_info, and yields a value of type size_t instead of unsigned int]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d1b78467a79f7d74ce45bcc7cef2efd637245486
Author: Qu Wenruo <wqu@suse.com>
Date:   Wed Nov 8 08:54:24 2017 +0800

    btrfs: tree-checker: Fix false panic for sanity test
    
    commit 69fc6cbbac542c349b3d350d10f6e394c253c81d upstream.
    
    [BUG]
    If we run btrfs with CONFIG_BTRFS_FS_RUN_SANITY_TESTS=y, it will
    instantly cause kernel panic like:
    
    ------
    ...
    assertion failed: 0, file: fs/btrfs/disk-io.c, line: 3853
    ...
    Call Trace:
     btrfs_mark_buffer_dirty+0x187/0x1f0 [btrfs]
     setup_items_for_insert+0x385/0x650 [btrfs]
     __btrfs_drop_extents+0x129a/0x1870 [btrfs]
    ...
    -----
    
    [Cause]
    Btrfs will call btrfs_check_leaf() in btrfs_mark_buffer_dirty() to check
    if the leaf is valid with CONFIG_BTRFS_FS_RUN_SANITY_TESTS=y.
    
    However quite some btrfs_mark_buffer_dirty() callers(*) don't really
    initialize its item data but only initialize its item pointers, leaving
    item data uninitialized.
    
    This makes tree-checker catch uninitialized data as error, causing
    such panic.
    
    *: These callers include but not limited to
    setup_items_for_insert()
    btrfs_split_item()
    btrfs_expand_item()
    
    [Fix]
    Add a new parameter @check_item_data to btrfs_check_leaf().
    With @check_item_data set to false, item data check will be skipped and
    fallback to old btrfs_check_leaf() behavior.
    
    So we can still get early warning if we screw up item pointers, and
    avoid false panic.
    
    Cc: Filipe Manana <fdmanana@gmail.com>
    Reported-by: Lakshmipathi.G <lakshmipathi.g@gmail.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4: adjust context]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit bb74cb06147642fc4267ef60d17cc7a12bc2e73b
Author: Qu Wenruo <quwenruo.btrfs@gmx.com>
Date:   Mon Oct 9 01:51:03 2017 +0000

    btrfs: tree-checker: Enhance btrfs_check_node output
    
    commit bba4f29896c986c4cec17bc0f19f2ce644fceae1 upstream.
    
    Use inline function to replace macro since we don't need
    stringification.
    (Macro still exists until all callers get updated)
    
    And add more info about the error, and replace EIO with EUCLEAN.
    
    For nr_items error, report if it's too large or too small, and output
    the valid value range.
    
    For node block pointer, added a new alignment checker.
    
    For key order, also output the next key to make the problem more
    obvious.
    
    Signed-off-by: Qu Wenruo <quwenruo.btrfs@gmx.com>
    [ wording adjustments, unindented long strings ]
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4:
     - Use root->sectorsize instead of root->fs_info->sectorsize
     - BTRFS_NODEPTRS_PER_BLOCK() takes a root instead of an fs_info, and yields
       a value of type size_t instead of unsigned int]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 426f2f276bd10d95560fe91d2851dc7cfbfacb8c
Author: Qu Wenruo <quwenruo.btrfs@gmx.com>
Date:   Mon Oct 9 01:51:02 2017 +0000

    btrfs: Move leaf and node validation checker to tree-checker.c
    
    commit 557ea5dd003d371536f6b4e8f7c8209a2b6fd4e3 upstream.
    
    It's no doubt the comprehensive tree block checker will become larger,
    so moving them into their own files is quite reasonable.
    
    Signed-off-by: Qu Wenruo <quwenruo.btrfs@gmx.com>
    [ wording adjustments ]
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4:
     - The moved code is slightly different
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 41136ad0ff8a38541cba0ea6235a08ae339f3dce
Author: Qu Wenruo <quwenruo.btrfs@gmx.com>
Date:   Wed Aug 23 16:57:59 2017 +0900

    btrfs: Add checker for EXTENT_CSUM
    
    commit 4b865cab96fe2a30ed512cf667b354bd291b3b0a upstream.
    
    EXTENT_CSUM checker is a relatively easy one, only needs to check:
    
    1) Objectid
       Fixed to BTRFS_EXTENT_CSUM_OBJECTID
    
    2) Key offset alignment
       Must be aligned to sectorsize
    
    3) Item size alignedment
       Must be aligned to csum size
    
    Signed-off-by: Qu Wenruo <quwenruo.btrfs@gmx.com>
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4: Use root->sectorsize instead of
     root->fs_info->sectorsize]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 53997b09f8614bcde8a46b4d8bcc88ce1177c9ef
Author: Qu Wenruo <quwenruo.btrfs@gmx.com>
Date:   Wed Aug 23 16:57:58 2017 +0900

    btrfs: Add sanity check for EXTENT_DATA when reading out leaf
    
    commit 40c3c40947324d9f40bf47830c92c59a9bbadf4a upstream.
    
    Add extra checks for item with EXTENT_DATA type.  This checks the
    following thing:
    
    0) Key offset
       All key offsets must be aligned to sectorsize.
       Inline extent must have 0 for key offset.
    
    1) Item size
       Uncompressed inline file extent size must match item size.
       (Compressed inline file extent has no information about its on-disk size.)
       Regular/preallocated file extent size must be a fixed value.
    
    2) Every member of regular file extent item
       Including alignment for bytenr and offset, possible value for
       compression/encryption/type.
    
    3) Type/compression/encode must be one of the valid values.
    
    This should be the most comprehensive and strict check in the context
    of btrfs_item for EXTENT_DATA.
    
    Signed-off-by: Qu Wenruo <quwenruo.btrfs@gmx.com>
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    [ switch to BTRFS_FILE_EXTENT_TYPES, similar to what
      BTRFS_COMPRESS_TYPES does ]
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4:
     - Use root->sectorsize instead of root->fs_info->sectorsize
     - Adjust filename]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7950c36a5f8d5a884430b3ff401652981e79f7bc
Author: Qu Wenruo <quwenruo.btrfs@gmx.com>
Date:   Wed Aug 23 16:57:57 2017 +0900

    btrfs: Check if item pointer overlaps with the item itself
    
    commit 7f43d4affb2a254d421ab20b0cf65ac2569909fb upstream.
    
    Function check_leaf() checks if any item pointer points outside of the
    leaf, but it doesn't check if the pointer overlaps with the item itself.
    
    Normally only the last item may be the victim, but adding such check is
    never a bad idea anyway.
    
    Signed-off-by: Qu Wenruo <quwenruo.btrfs@gmx.com>
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d3664e3107928ff279529dc38bb3cd8e8d068917
Author: Qu Wenruo <quwenruo.btrfs@gmx.com>
Date:   Wed Aug 23 16:57:56 2017 +0900

    btrfs: Refactor check_leaf function for later expansion
    
    commit c3267bbaa9cae09b62960eafe33ad19196803285 upstream.
    
    Current check_leaf() function does a good job checking key order and
    item offset/size.
    
    However it only checks from slot 0 to the last but one slot, this is
    good but makes later expansion hard.
    
    So this refactoring iterates from slot 0 to the last slot.
    For key comparison, it uses a key with all 0 as initial key, so all
    valid keys should be larger than that.
    
    And for item size/offset checks, it compares current item end with
    previous item offset.
    For slot 0, use leaf end as a special case.
    
    This makes later item/key offset checks and item size checks easier to
    be implemented.
    
    Also, makes check_leaf() to return -EUCLEAN other than -EIO to indicate
    error.
    
    Signed-off-by: Qu Wenruo <quwenruo.btrfs@gmx.com>
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 4.4:
     - BTRFS_LEAF_DATA_SIZE() takes a root rather than an fs_info
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2fb87551def3eb107c26a8331dcfe89296bb0e57
Author: Jeff Mahoney <jeffm@suse.com>
Date:   Wed Jun 28 21:56:53 2017 -0600

    btrfs: struct-funcs, constify readers
    
    commit 1cbb1f454e5321e47fc1e6b233066c7ccc979d15 upstream.
    
    We have reader helpers for most of the on-disk structures that use
    an extent_buffer and pointer as offset into the buffer that are
    read-only.  We should mark them as const and, in turn, allow consumers
    of these interfaces to mark the buffers const as well.
    
    No impact on code, but serves as documentation that a buffer is intended
    not to be modified.
    
    Signed-off-by: Jeff Mahoney <jeffm@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit ceb8846c2566b29d79950c6f3c523a66f72f6c6e
Author: Filipe Manana <fdmanana@suse.com>
Date:   Wed Nov 23 16:21:18 2016 +0000

    Btrfs: fix emptiness check for dirtied extent buffers at check_leaf()
    
    commit f177d73949bf758542ca15a1c1945bd2e802cc65 upstream.
    
    We can not simply use the owner field from an extent buffer's header to
    get the id of the respective tree when the extent buffer is from a
    relocation tree. When we create the root for a relocation tree we leave
    (on purpose) the owner field with the same value as the subvolume's tree
    root (we do this at ctree.c:btrfs_copy_root()). So we must ignore extent
    buffers from relocation trees, which have the BTRFS_HEADER_FLAG_RELOC
    flag set, because otherwise we will always consider the extent buffer
    as not being the root of the tree (the root of original subvolume tree
    is always different from the root of the respective relocation tree).
    
    This lead to assertion failures when running with the integrity checker
    enabled (CONFIG_BTRFS_FS_CHECK_INTEGRITY=y) such as the following:
    
    [  643.393409] BTRFS critical (device sdg): corrupt leaf, non-root leaf's nritems is 0: block=38506496, root=260, slot=0
    [  643.397609] BTRFS info (device sdg): leaf 38506496 total ptrs 0 free space 3995
    [  643.407075] assertion failed: 0, file: fs/btrfs/disk-io.c, line: 4078
    [  643.408425] ------------[ cut here ]------------
    [  643.409112] kernel BUG at fs/btrfs/ctree.h:3419!
    [  643.409773] invalid opcode: 0000 [#1] PREEMPT SMP
    [  643.410447] Modules linked in: dm_flakey dm_mod crc32c_generic btrfs xor raid6_pq ppdev psmouse acpi_cpufreq parport_pc evdev parport tpm_tis tpm_tis_core pcspkr serio_raw i2c_piix4 sg tpm i2c_core button processor loop autofs4 ext4 crc16 jbd2 mbcache sr_mod cdrom sd_mod ata_generic virtio_scsi ata_piix libata virtio_pci virtio_ring scsi_mod virtio e1000 floppy
    [  643.414356] CPU: 11 PID: 32726 Comm: btrfs Not tainted 4.8.0-rc8-btrfs-next-35+ #1
    [  643.414356] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.1-0-gb3ef39f-prebuilt.qemu-project.org 04/01/2014
    [  643.414356] task: ffff880145e95b00 task.stack: ffff88014826c000
    [  643.414356] RIP: 0010:[<ffffffffa0352759>]  [<ffffffffa0352759>] assfail.constprop.41+0x1c/0x1e [btrfs]
    [  643.414356] RSP: 0018:ffff88014826fa28  EFLAGS: 00010292
    [  643.414356] RAX: 0000000000000039 RBX: ffff88014e2d7c38 RCX: 0000000000000001
    [  643.414356] RDX: ffff88023f4d2f58 RSI: ffffffff81806c63 RDI: 00000000ffffffff
    [  643.414356] RBP: ffff88014826fa28 R08: 0000000000000001 R09: 0000000000000000
    [  643.414356] R10: ffff88014826f918 R11: ffffffff82f3c5ed R12: ffff880172910000
    [  643.414356] R13: ffff880233992230 R14: ffff8801a68a3310 R15: fffffffffffffff8
    [  643.414356] FS:  00007f9ca305e8c0(0000) GS:ffff88023f4c0000(0000) knlGS:0000000000000000
    [  643.414356] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  643.414356] CR2: 00007f9ca3071000 CR3: 000000015d01b000 CR4: 00000000000006e0
    [  643.414356] Stack:
    [  643.414356]  ffff88014826fa50 ffffffffa02d655a 000000000000000a ffff88014e2d7c38
    [  643.414356]  0000000000000000 ffff88014826faa8 ffffffffa02b72f3 ffff88014826fab8
    [  643.414356]  00ffffffa03228e4 0000000000000000 0000000000000000 ffff8801bbd4e000
    [  643.414356] Call Trace:
    [  643.414356]  [<ffffffffa02d655a>] btrfs_mark_buffer_dirty+0xdf/0xe5 [btrfs]
    [  643.414356]  [<ffffffffa02b72f3>] btrfs_copy_root+0x18a/0x1d1 [btrfs]
    [  643.414356]  [<ffffffffa0322921>] create_reloc_root+0x72/0x1ba [btrfs]
    [  643.414356]  [<ffffffffa03267c2>] btrfs_init_reloc_root+0x7b/0xa7 [btrfs]
    [  643.414356]  [<ffffffffa02d9e44>] record_root_in_trans+0xdf/0xed [btrfs]
    [  643.414356]  [<ffffffffa02db04e>] btrfs_record_root_in_trans+0x50/0x6a [btrfs]
    [  643.414356]  [<ffffffffa030ad2b>] create_subvol+0x472/0x773 [btrfs]
    [  643.414356]  [<ffffffffa030b406>] btrfs_mksubvol+0x3da/0x463 [btrfs]
    [  643.414356]  [<ffffffffa030b406>] ? btrfs_mksubvol+0x3da/0x463 [btrfs]
    [  643.414356]  [<ffffffff810781ac>] ? preempt_count_add+0x65/0x68
    [  643.414356]  [<ffffffff811a6e97>] ? __mnt_want_write+0x62/0x77
    [  643.414356]  [<ffffffffa030b55d>] btrfs_ioctl_snap_create_transid+0xce/0x187 [btrfs]
    [  643.414356]  [<ffffffffa030b67d>] btrfs_ioctl_snap_create+0x67/0x81 [btrfs]
    [  643.414356]  [<ffffffffa030ecfd>] btrfs_ioctl+0x508/0x20dd [btrfs]
    [  643.414356]  [<ffffffff81293e39>] ? __this_cpu_preempt_check+0x13/0x15
    [  643.414356]  [<ffffffff81155eca>] ? handle_mm_fault+0x976/0x9ab
    [  643.414356]  [<ffffffff81091300>] ? arch_local_irq_save+0x9/0xc
    [  643.414356]  [<ffffffff8119a2b0>] vfs_ioctl+0x18/0x34
    [  643.414356]  [<ffffffff8119a8e8>] do_vfs_ioctl+0x581/0x600
    [  643.414356]  [<ffffffff814b9552>] ? entry_SYSCALL_64_fastpath+0x5/0xa8
    [  643.414356]  [<ffffffff81093fe9>] ? trace_hardirqs_on_caller+0x17b/0x197
    [  643.414356]  [<ffffffff8119a9be>] SyS_ioctl+0x57/0x79
    [  643.414356]  [<ffffffff814b9565>] entry_SYSCALL_64_fastpath+0x18/0xa8
    [  643.414356]  [<ffffffff81091b08>] ? trace_hardirqs_off_caller+0x3f/0xaa
    [  643.414356] Code: 89 83 88 00 00 00 31 c0 5b 41 5c 41 5d 5d c3 55 89 f1 48 c7 c2 98 bc 35 a0 48 89 fe 48 c7 c7 05 be 35 a0 48 89 e5 e8 13 46 dd e0 <0f> 0b 55 89 f1 48 c7 c2 9f d3 35 a0 48 89 fe 48 c7 c7 7a d5 35
    [  643.414356] RIP  [<ffffffffa0352759>] assfail.constprop.41+0x1c/0x1e [btrfs]
    [  643.414356]  RSP <ffff88014826fa28>
    [  643.468267] ---[ end trace 6a1b3fb1a9d7d6e3 ]---
    
    This can be easily reproduced by running xfstests with the integrity
    checker enabled.
    
    Fixes: 1ba98d086fe3 (Btrfs: detect corruption when non-root leaf has zero item)
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 1615e67b22d54a1c83a4113fc0b2fcb799cac029
Author: Liu Bo <bo.li.liu@oracle.com>
Date:   Fri Sep 23 13:44:44 2016 -0700

    Btrfs: memset to avoid stale content in btree leaf
    
    commit 851cd173f06045816528176001cf82948282029c upstream.
    
    This is an additional patch to
    "Btrfs: memset to avoid stale content in btree node block".
    
    This uses memset to initialize the unused space in a leaf to avoid
    potential stale content, which may be incurred by pushing items
    between sibling leaves.
    
    Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b410d6d28d5fbdf8e9e2dec8a103a16b79d3060b
Author: Liu Bo <bo.li.liu@oracle.com>
Date:   Wed Sep 14 19:19:05 2016 -0700

    Btrfs: kill BUG_ON in run_delayed_tree_ref
    
    commit 02794222c4132ac003e7281fb71f4ec1645ffc87 upstream.
    
    In a corrupted btrfs image, we can come across this BUG_ON and
    get an unreponsive system, but if we return errors instead,
    its caller can handle everything gracefully by aborting the current
    transaction.
    
    Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3167393e0e2edc82720f278f33db8d61f6041014
Author: Liu Bo <bo.li.liu@oracle.com>
Date:   Wed Sep 14 17:23:24 2016 -0700

    Btrfs: improve check_node to avoid reading corrupted nodes
    
    commit 6b722c1747d533ac6d4df110dc8233db46918b65 upstream.
    
    We need to check items in a node to make sure that we're reading
    a valid one, otherwise we could get various crashes while processing
    delayed_refs.
    
    Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 4fcf49a10eccd4efeeadc904d5d8dc0dcf5672fb
Author: Liu Bo <bo.li.liu@oracle.com>
Date:   Wed Sep 14 17:22:57 2016 -0700

    Btrfs: memset to avoid stale content in btree node block
    
    commit 3eb548ee3a8042d95ad81be254e67a5222c24e03 upstream.
    
    During updating btree, we could push items between sibling
    nodes/leaves, for leaves data sections starts reversely from
    the end of the block while for nodes we only have key pairs
    which are stored one by one from the start of the block.
    
    So we could do try to push key pairs from one node to the next
    node right in the tree, and after that, we update the node's
    nritems to reflect the correct end while leaving the stale
    content in the node.  One may intentionally corrupt the fs
    image and access the stale content by bumping the nritems and
    causes various crashes.
    
    This takes the in-memory @nritems as the correct one and
    gets to memset the unused part of a btree node.
    
    Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit f160883f341780b9d040e9a3fbf9fbc691bb854b
Author: Liu Bo <bo.li.liu@oracle.com>
Date:   Fri Sep 2 12:35:34 2016 -0700

    Btrfs: fix BUG_ON in btrfs_mark_buffer_dirty
    
    commit ef85b25e982b5bba1530b936e283ef129f02ab9d upstream.
    
    This can only happen with CONFIG_BTRFS_FS_CHECK_INTEGRITY=y.
    
    Commit 1ba98d0 ("Btrfs: detect corruption when non-root leaf has zero item")
    assumes that a leaf is its root when leaf->bytenr == btrfs_root_bytenr(root),
    however, we should not use btrfs_root_bytenr(root) since it's mainly got
    updated during committing transaction.  So the check can fail when doing
    COW on this leaf while it is a root.
    
    This changes to use "if (leaf == btrfs_root_node(root))" instead, just like
    how we check whether leaf is a root in __btrfs_cow_block().
    
    Fixes: 1ba98d086fe3 (Btrfs: detect corruption when non-root leaf has zero item)
    Reported-by: Jeff Mahoney <jeffm@suse.com>
    Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2b53e185f3a27c04d8b4288f7c8c2d049d8df7eb
Author: Liu Bo <bo.li.liu@oracle.com>
Date:   Tue Aug 23 17:37:45 2016 -0700

    Btrfs: check btree node's nritems
    
    commit 053ab70f0604224c7893b43f9d9d5efa283580d6 upstream.
    
    When btree node (level = 1) has nritems which equals to zero,
    we can end up with panic due to insert_ptr()'s
    
    BUG_ON(slot > nritems);
    
    where slot is 1 and nritems is 0, as copy_for_split() calls
    insert_ptr(.., path->slots[1] + 1, ...);
    
    A invalid value results in the whole mess, this adds the check
    for btree's node nritems so that we stop reading block when
    when something is wrong.
    
    Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Chris Mason <clm@fb.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2cf92740c194ac78e9c3cc487e4a54fde2d18d8f
Author: Liu Bo <bo.li.liu@oracle.com>
Date:   Tue Aug 23 15:22:58 2016 -0700

    Btrfs: detect corruption when non-root leaf has zero item
    
    commit 1ba98d086fe3a14d6a31f2f66dbab70c45d00f63 upstream.
    
    Right now we treat leaf which has zero item as a valid one
    because we could have an empty tree, that is, a root that is
    also a leaf without any item, however, in the same case but
    when the leaf is not a root, we can end up with hitting the
    BUG_ON(1) in btrfs_extend_item() called by
    setup_inline_extent_backref().
    
    This makes us check the situation as a corruption if leaf is
    not its own root.
    
    Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Chris Mason <clm@fb.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 0f28980ffa49f443f0ff7d6c7d4b11717c623f60
Author: Josef Bacik <jbacik@fb.com>
Date:   Thu Aug 18 15:30:06 2016 -0400

    Btrfs: fix em leak in find_first_block_group
    
    commit 187ee58c62c1d0d238d3dc4835869d33e1869906 upstream.
    
    We need to call free_extent_map() on the em we look up.
    
    Signed-off-by: Josef Bacik <jbacik@fb.com>
    Reviewed-by: Omar Sandoval <osandov@fb.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Chris Mason <clm@fb.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit bffcf6b7acbdf1c9713339d69e801e1049bd88f9
Author: Liu Bo <bo.li.liu@oracle.com>
Date:   Wed Jun 22 18:31:27 2016 -0700

    Btrfs: check inconsistence between chunk and block group
    
    commit 6fb37b756acce6d6e045f79c3764206033f617b4 upstream.
    
    With btrfs-corrupt-block, one can drop one chunk item and mounting
    will end up with a panic in btrfs_full_stripe_len().
    
    This doesn't not remove the BUG_ON, but instead checks it a bit
    earlier when we find the block group item.
    
    Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 6f69f2cd26a94557a620e1c62e8dddee83690c1b
Author: Liu Bo <bo.li.liu@oracle.com>
Date:   Fri Jun 3 12:05:15 2016 -0700

    Btrfs: add validadtion checks for chunk loading
    
    commit e06cd3dd7cea50e87663a88acdfdb7ac1c53a5ca upstream.
    
    To prevent fuzzed filesystem images from panic the whole system,
    we need various validation checks to refuse to mount such an image
    if btrfs finds any invalid value during loading chunks, including
    both sys_array and regular chunks.
    
    Note that these checks may not be sufficient to cover all corner cases,
    feel free to add more checks.
    
    Reported-by: Vegard Nossum <vegard.nossum@oracle.com>
    Reported-by: Quentin Casasnovas <quentin.casasnovas@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 6a467e9388f3e81c2e3923d1b66eaa868a38b7c8
Author: Qu Wenruo <quwenruo@cn.fujitsu.com>
Date:   Tue Dec 15 09:14:37 2015 +0800

    btrfs: Enhance chunk validation check
    
    commit f04b772bfc17f502703794f4d100d12155c1a1a9 upstream.
    
    Enhance chunk validation:
    1) Num_stripes
       We already have such check but it's only in super block sys chunk
       array.
       Now check all on-disk chunks.
    
    2) Chunk logical
       It should be aligned to sector size.
       This behavior should be *DOUBLE CHECKED* for 64K sector size like
       PPC64 or AArch64.
       Maybe we can found some hidden bugs.
    
    3) Chunk length
       Same as chunk logical, should be aligned to sector size.
    
    4) Stripe length
       It should be power of 2.
    
    5) Chunk type
       Any bit out of TYPE_MAS | PROFILE_MASK is invalid.
    
    With all these much restrict rules, several fuzzed image reported in
    mail list should no longer cause kernel panic.
    
    Reported-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
    Signed-off-by: Chris Mason <clm@fb.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 901c0db7822868f921ac48a5f0aa91d4b91539a7
Author: David Sterba <dsterba@suse.com>
Date:   Mon Nov 30 17:27:06 2015 +0100

    btrfs: handle invalid num_stripes in sys_array
    
    commit f5cdedd73fa71b74dcc42f2a11a5735d89ce7c4f upstream.
    
    We can handle the special case of num_stripes == 0 directly inside
    btrfs_read_sys_array. The BUG_ON in btrfs_chunk_item_size is there to
    catch other unhandled cases where we fail to validate external data.
    
    A crafted or corrupted image crashes at mount time:
    
    BTRFS: device fsid 9006933e-2a9a-44f0-917f-514252aeec2c devid 1 transid 7 /dev/loop0
    BTRFS info (device loop0): disk space caching is enabled
    BUG: failure at fs/btrfs/ctree.h:337/btrfs_chunk_item_size()!
    Kernel panic - not syncing: BUG!
    CPU: 0 PID: 313 Comm: mount Not tainted 4.2.5-00657-ge047887-dirty #25
    Stack:
     637af890 60062489 602aeb2e 604192ba
     60387961 00000011 637af8a0 6038a835
     637af9c0 6038776b 634ef32b 00000000
    Call Trace:
     [<6001c86d>] show_stack+0xfe/0x15b
     [<6038a835>] dump_stack+0x2a/0x2c
     [<6038776b>] panic+0x13e/0x2b3
     [<6020f099>] btrfs_read_sys_array+0x25d/0x2ff
     [<601cfbbe>] open_ctree+0x192d/0x27af
     [<6019c2c1>] btrfs_mount+0x8f5/0xb9a
     [<600bc9a7>] mount_fs+0x11/0xf3
     [<600d5167>] vfs_kern_mount+0x75/0x11a
     [<6019bcb0>] btrfs_mount+0x2e4/0xb9a
     [<600bc9a7>] mount_fs+0x11/0xf3
     [<600d5167>] vfs_kern_mount+0x75/0x11a
     [<600d710b>] do_mount+0xa35/0xbc9
     [<600d7557>] SyS_mount+0x95/0xc8
     [<6001e884>] handle_syscall+0x6b/0x8e
    
    Reported-by: Jiri Slaby <jslaby@suse.com>
    Reported-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 12643b6d924758f5a079f608212787dd130d9cd1
Author: Jeff Mahoney <jeffm@suse.com>
Date:   Wed Jun 3 10:55:48 2015 -0400

    btrfs: cleanup, stop casting for extent_map->lookup everywhere
    
    commit 95617d69326ce386c95e33db7aeb832b45ee9f8f upstream.
    
    Overloading extent_map->bdev to struct map_lookup * might have started out
    as a means to an end, but it's a pattern that's used all over the place
    now. Let's get rid of the casting and just add a union instead.
    
    Signed-off-by: Jeff Mahoney <jeffm@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16: drop changes in
     btrfs_start_trans_remove_block_group(),
     btrfs_update_commit_device_bytes_used()]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 9e9e1e25c090be2937a85368484fbac52b0152a4
Author: David Sterba <dsterba@suse.cz>
Date:   Wed Nov 5 15:24:51 2014 +0100

    btrfs: add more checks to btrfs_read_sys_array
    
    commit e3540eab29e1b2260bc4b9b3979a49a00e3e3af8 upstream.
    
    Verify that the sys_array has enough bytes to read the next item.
    
    Signed-off-by: David Sterba <dsterba@suse.cz>
    Signed-off-by: Chris Mason <clm@fb.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 24534928f8d45ba232e981ad502d52aff29f8bdd
Author: David Sterba <dsterba@suse.cz>
Date:   Fri Oct 31 19:02:42 2014 +0100

    btrfs: cleanup, rename a few variables in btrfs_read_sys_array
    
    commit 1ffb22cf8c322bbfea6b35fe23d025841b49fede upstream.
    
    There's a pointer to buffer, integer offset and offset passed as
    pointer, try to find matching names for them.
    
    Signed-off-by: David Sterba <dsterba@suse.cz>
    Signed-off-by: Chris Mason <clm@fb.com>
    [bwh: Backported to 3.16 as dependency of fixes to this function]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 90bfd6e18e1f4f33a7319590ed87a68be58eabbc
Author: David Sterba <dsterba@suse.cz>
Date:   Thu Jul 31 01:03:53 2014 +0200

    btrfs: kill extent_buffer_page helper
    
    commit fb85fc9a675738ee2746b51c3aedde944b18ca02 upstream.
    
    It used to be more complex but now it's just a simple array access.
    
    Signed-off-by: David Sterba <dsterba@suse.cz>
    [bwh: Backported to 3.16 as dependency of various fixes: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit bc1ff6e3475cdb14691e086bf771aee7bbabddb0
Author: David Sterba <dsterba@suse.cz>
Date:   Thu Jul 24 17:34:58 2014 +0200

    btrfs: new define for the inline extent data start
    
    commit 7ec20afbcb7b257aec82ea5d66e6b0b7499abaca upstream.
    
    Use a common definition for the inline data start so we don't have to
    open-code it and introduce bugs like "Btrfs: fix wrong max inline data
    size limit" fixed.
    
    Signed-off-by: David Sterba <dsterba@suse.cz>
    [bwh: Backported to 3.16 as dependency of various fixes: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 1e404ae2039471ae9ee38f2181d8316c9307b5eb
Author: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Date:   Thu Jul 17 11:44:12 2014 +0800

    Btrfs: fix wrong max inline data size limit
    
    commit c01a5c074c0f6f85a3b02e39432b9e5576ab51de upstream.
    
    inline data is stored from offset of @disk_bytenr in
    struct btrfs_file_extent_item. So substracting total
    size of struct btrfs_file_extent_item is wrong, fix it.
    
    Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
    Reviewed-by: David Sterba <dsterba@suse.cz>
    Signed-off-by: Chris Mason <clm@fb.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 6a293f46d3eaafcbc4a3316f2ac80de9b1398415
Author: Jan Kara <jack@suse.com>
Date:   Mon Dec 7 14:34:49 2015 -0500

    ext4: fix races of writeback with punch hole and zero range
    
    commit 011278485ecc3cd2a3954b5d4c73101d919bf1fa upstream.
    
    When doing delayed allocation, update of on-disk inode size is postponed
    until IO submission time. However hole punch or zero range fallocate
    calls can end up discarding the tail page cache page and thus on-disk
    inode size would never be properly updated.
    
    Make sure the on-disk inode size is updated before truncating page
    cache.
    
    Signed-off-by: Jan Kara <jack@suse.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8a76993a673d694c17cd6fd6d7d9fc323fe224d4
Author: Jan Kara <jack@suse.com>
Date:   Mon Dec 7 14:31:11 2015 -0500

    ext4: fix races between buffered IO and collapse / insert range
    
    commit 32ebffd3bbb4162da5ff88f9a35dd32d0a28ea70 upstream.
    
    Current code implementing FALLOC_FL_COLLAPSE_RANGE and
    FALLOC_FL_INSERT_RANGE is prone to races with buffered writes and page
    faults. If buffered write or write via mmap manages to squeeze between
    filemap_write_and_wait_range() and truncate_pagecache() in the fallocate
    implementations, the written data is simply discarded by
    truncate_pagecache() although it should have been shifted.
    
    Fix the problem by moving filemap_write_and_wait_range() call inside
    i_mutex and i_mmap_sem. That way we are protected against races with
    both buffered writes and page faults.
    
    Signed-off-by: Jan Kara <jack@suse.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    [bwh: Backported to 3.16: drop changes in ext4_insert_range()]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5c72decb78daa9e21cf0cc4d00c1fdfa70233719
Author: Jan Kara <jack@suse.com>
Date:   Mon Dec 7 14:29:17 2015 -0500

    ext4: move unlocked dio protection from ext4_alloc_file_blocks()
    
    commit 17048e8a083fec7ad841d88ef0812707fbc7e39f upstream.
    
    Currently ext4_alloc_file_blocks() was handling protection against
    unlocked DIO. However we now need to sometimes call it under i_mmap_sem
    and sometimes not and DIO protection ranks above it (although strictly
    speaking this cannot currently create any deadlocks). Also
    ext4_zero_range() was actually getting & releasing unlocked DIO
    protection twice in some cases. Luckily it didn't introduce any real bug
    but it was a land mine waiting to be stepped on.  So move DIO protection
    out from ext4_alloc_file_blocks() into the two callsites.
    
    Signed-off-by: Jan Kara <jack@suse.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 81a2281115c28be55d3489c3a79c84db294b722a
Author: Jan Kara <jack@suse.com>
Date:   Mon Dec 7 14:28:03 2015 -0500

    ext4: fix races between page faults and hole punching
    
    commit ea3d7209ca01da209cda6f0dea8be9cc4b7a933b upstream.
    
    Currently, page faults and hole punching are completely unsynchronized.
    This can result in page fault faulting in a page into a range that we
    are punching after truncate_pagecache_range() has been called and thus
    we can end up with a page mapped to disk blocks that will be shortly
    freed. Filesystem corruption will shortly follow. Note that the same
    race is avoided for truncate by checking page fault offset against
    i_size but there isn't similar mechanism available for punching holes.
    
    Fix the problem by creating new rw semaphore i_mmap_sem in inode and
    grab it for writing over truncate, hole punching, and other functions
    removing blocks from extent tree and for read over page faults. We
    cannot easily use i_data_sem for this since that ranks below transaction
    start and we need something ranking above it so that it can be held over
    the whole truncate / hole punching operation. Also remove various
    workarounds we had in the code to reduce race window when page fault
    could have created pages with stale mapping information.
    
    Signed-off-by: Jan Kara <jack@suse.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    [bwh: Backported to 3.16:
     - Drop changes in ext4_insert_range(), ext4_dax_*
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 4882b2820c473d31df4f1b37f96d50e7705603f3
Author: Chao Yu <chao@kernel.org>
Date:   Wed Sep 11 17:36:50 2019 +0800

    quota: fix wrong condition in is_quota_modification()
    
    commit 6565c182094f69e4ffdece337d395eb7ec760efc upstream.
    
    Quoted from
    commit 3da40c7b0898 ("ext4: only call ext4_truncate when size <= isize")
    
    " At LSF we decided that if we truncate up from isize we shouldn't trim
      fallocated blocks that were fallocated with KEEP_SIZE and are past the
     new i_size.  This patch fixes ext4 to do this. "
    
    And generic/092 of fstest have covered this case for long time, however
    is_quota_modification() didn't adjust based on that rule, so that in
    below condition, we will lose to quota block change:
    - fallocate blocks beyond EOF
    - remount
    - truncate(file_path, file_size)
    
    Fix it.
    
    Link: https://lore.kernel.org/r/20190911093650.35329-1-yuchao0@huawei.com
    Fixes: 3da40c7b0898 ("ext4: only call ext4_truncate when size <= isize")
    Signed-off-by: Chao Yu <yuchao0@huawei.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 25b627e77e45b3f83283d6d6ce6717cee4148150
Author: Eryu Guan <guaneryu@gmail.com>
Date:   Tue Jul 28 15:08:41 2015 -0400

    ext4: update c/mtime on truncate up
    
    commit 911af577de4e444622d46500c1f9a37ab4335d3a upstream.
    
    Commit 3da40c7b0898 ("ext4: only call ext4_truncate when size <= isize")
    introduced a bug that c/mtime is not updated on truncate up.
    
    Fix the issue by setting c/mtime explicitly in the truncate up case.
    
    Note that ftruncate(2) is not affected, so you won't see this bug using
    truncate(1) and xfs_io(1).
    
    Signed-off-by: Zirong Lang <zorro.lang@gmail.com>
    Signed-off-by: Eryu Guan <guaneryu@gmail.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 43626ce2bc6f74bcd2564ce569717854f93f2eaf
Author: Josef Bacik <jbacik@fb.com>
Date:   Mon Jun 22 00:31:26 2015 -0400

    ext4: only call ext4_truncate when size <= isize
    
    commit 3da40c7b089810ac9cf2bb1e59633f619f3a7312 upstream.
    
    At LSF we decided that if we truncate up from isize we shouldn't trim
    fallocated blocks that were fallocated with KEEP_SIZE and are past the
    new i_size.  This patch fixes ext4 to do this.
    
    [ Completely reworked patch so that i_disksize would actually get set
      when truncating up.  Also reworked the code for handling truncate so
      that it's easier to handle. -- tytso ]
    
    Signed-off-by: Josef Bacik <jbacik@fb.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Lukas Czerner <lczerner@redhat.com>
    [bwh: Backported to 3.16 as dependency of commit ea3d7209ca01
     "ext4: fix races between page faults and hole punching":
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d903e98eff2e520517c9e379f59ba8faee2631fb
Author: Lukas Czerner <lczerner@redhat.com>
Date:   Mon Jun 15 00:23:53 2015 -0400

    ext4: wait for existing dio workers in ext4_alloc_file_blocks()
    
    commit 0d306dcf86e8f065dff42a4a934ae9d99af35ba5 upstream.
    
    Currently existing dio workers can jump in and potentially increase
    extent tree depth while we're allocating blocks in
    ext4_alloc_file_blocks().  This may cause us to underestimate the
    number of credits needed for the transaction because the extent tree
    depth can change after our estimation.
    
    Fix this by waiting for all the existing dio workers in the same way
    as we do it in ext4_punch_hole.  We've seen errors caused by this in
    xfstest generic/299, however it's really hard to reproduce.
    
    Signed-off-by: Lukas Czerner <lczerner@redhat.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2d3ba5e1f01a52228d74a0ee9a6c56031f68168e
Author: Tom Lendacky <thomas.lendacky@amd.com>
Date:   Thu Nov 30 16:46:40 2017 -0600

    x86/microcode/AMD: Add support for fam17h microcode loading
    
    commit f4e9b7af0cd58dd039a0fb2cd67d57cea4889abf upstream.
    
    The size for the Microcode Patch Block (MPB) for an AMD family 17h
    processor is 3200 bytes.  Add a #define for fam17h so that it does
    not default to 2048 bytes and fail a microcode load/update.
    
    Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Borislav Petkov <bp@alien8.de>
    Link: https://lkml.kernel.org/r/20171130224640.15391.40247.stgit@tlendack-t1.amdoffice.net
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 93864704f211e55eddec0c03ca300b1cf6414d8c
Author: Jouni Malinen <jouni@codeaurora.org>
Date:   Wed Sep 11 16:03:05 2019 +0300

    mac80211: Do not send Layer 2 Update frame before authorization
    
    commit 3e493173b7841259a08c5c8e5cbe90adb349da7e upstream.
    
    The Layer 2 Update frame is used to update bridges when a station roams
    to another AP even if that STA does not transmit any frames after the
    reassociation. This behavior was described in IEEE Std 802.11F-2003 as
    something that would happen based on MLME-ASSOCIATE.indication, i.e.,
    before completing 4-way handshake. However, this IEEE trial-use
    recommended practice document was published before RSN (IEEE Std
    802.11i-2004) and as such, did not consider RSN use cases. Furthermore,
    IEEE Std 802.11F-2003 was withdrawn in 2006 and as such, has not been
    maintained amd should not be used anymore.
    
    Sending out the Layer 2 Update frame immediately after association is
    fine for open networks (and also when using SAE, FT protocol, or FILS
    authentication when the station is actually authenticated by the time
    association completes). However, it is not appropriate for cases where
    RSN is used with PSK or EAP authentication since the station is actually
    fully authenticated only once the 4-way handshake completes after
    authentication and attackers might be able to use the unauthenticated
    triggering of Layer 2 Update frame transmission to disrupt bridge
    behavior.
    
    Fix this by postponing transmission of the Layer 2 Update frame from
    station entry addition to the point when the station entry is marked
    authorized. Similarly, send out the VLAN binding update only if the STA
    entry has already been authorized.
    
    Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
    Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
    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 fab9b9d7d298efd742488e9dce3e06caacd8da97
Author: Dedy Lansky <dlansky@codeaurora.org>
Date:   Sun Jul 29 14:59:16 2018 +0300

    cfg80211/mac80211: make ieee80211_send_layer2_update a public function
    
    commit 30ca1aa536211f5ac3de0173513a7a99a98a97f3 upstream.
    
    Make ieee80211_send_layer2_update() a common function so other drivers
    can re-use it.
    
    Signed-off-by: Dedy Lansky <dlansky@codeaurora.org>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    [bwh: Backported to 3.16 as dependency of commit 3e493173b784
     "mac80211: Do not send Layer 2 Update frame before authorization":
     - Retain type-casting of skb_put() return value
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit ef0449fb4c94e52c1f5f7170b52a738acf9af5ff
Author: qize wang <wangqize888888888@gmail.com>
Date:   Fri Nov 29 18:10:54 2019 +0800

    mwifiex: Fix heap overflow in mmwifiex_process_tdls_action_frame()
    
    commit 1e58252e334dc3f3756f424a157d1b7484464c40 upstream.
    
    mwifiex_process_tdls_action_frame() without checking
    the incoming tdls infomation element's vality before use it,
    this may cause multi heap buffer overflows.
    
    Fix them by putting vality check before use it.
    
    IE is TLV struct, but ht_cap and  ht_oper aren’t TLV struct.
    the origin marvell driver code is wrong:
    
    memcpy(&sta_ptr->tdls_cap.ht_oper, pos,....
    memcpy((u8 *)&sta_ptr->tdls_cap.ht_capb, pos,...
    
    Fix the bug by changing pos(the address of IE) to
    pos+2 ( the address of IE value ).
    
    Signed-off-by: qize wang <wangqize888888888@gmail.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    [bwh: Backported to 3.16: adjust filename, context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 585453f1881a2f6b650d38a6f9e45621faa0b273
Author: Avinash Patil <patila@marvell.com>
Date:   Fri Sep 12 20:08:46 2014 +0530

    mwifiex: fix probable memory corruption while processing TDLS frame
    
    commit 3c99832d74777c9ec5545a92450fac5d37b0d0e1 upstream.
    
    Size of RSN IE buffer in driver is 254 while maximum size of received buffer
    to be copied to RSN IE buffer can be 255. Add boundary check to copy maximum
    of 254 bytes into RSN IE buffer.
    
    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Avinash Patil <patila@marvell.com>
    Signed-off-by: John W. Linville <linville@tuxdriver.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2485578fc363bfc01012027cca4a746993a5df52
Author: Nicolai Stange <nstange@suse.de>
Date:   Tue Jan 14 11:39:03 2020 +0100

    libertas: make lbs_ibss_join_existing() return error code on rates overflow
    
    commit 1754c4f60aaf1e17d886afefee97e94d7f27b4cb upstream.
    
    Commit e5e884b42639 ("libertas: Fix two buffer overflows at parsing bss
    descriptor") introduced a bounds check on the number of supplied rates to
    lbs_ibss_join_existing() and made it to return on overflow.
    
    However, the aforementioned commit doesn't set the return value accordingly
    and thus, lbs_ibss_join_existing() would return with zero even though it
    failed.
    
    Make lbs_ibss_join_existing return -EINVAL in case the bounds check on the
    number of supplied rates fails.
    
    Fixes: e5e884b42639 ("libertas: Fix two buffer overflows at parsing bss descriptor")
    Signed-off-by: Nicolai Stange <nstange@suse.de>
    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 f19d773f4a3192baf31500e77d4088c8e1be248c
Author: Nicolai Stange <nstange@suse.de>
Date:   Tue Jan 14 11:39:02 2020 +0100

    libertas: don't exit from lbs_ibss_join_existing() with RCU read lock held
    
    commit c7bf1fb7ddca331780b9a733ae308737b39f1ad4 upstream.
    
    Commit e5e884b42639 ("libertas: Fix two buffer overflows at parsing bss
    descriptor") introduced a bounds check on the number of supplied rates to
    lbs_ibss_join_existing().
    
    Unfortunately, it introduced a return path from within a RCU read side
    critical section without a corresponding rcu_read_unlock(). Fix this.
    
    Fixes: e5e884b42639 ("libertas: Fix two buffer overflows at parsing bss descriptor")
    Signed-off-by: Nicolai Stange <nstange@suse.de>
    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 e4646070f91312414af0ca9332a79b7153150fae
Author: Wen Huang <huangwenabc@gmail.com>
Date:   Thu Nov 28 18:51:04 2019 +0800

    libertas: Fix two buffer overflows at parsing bss descriptor
    
    commit e5e884b42639c74b5b57dc277909915c0aefc8bb upstream.
    
    add_ie_rates() copys rates without checking the length
    in bss descriptor from remote AP.when victim connects to
    remote attacker, this may trigger buffer overflow.
    lbs_ibss_join_existing() copys rates without checking the length
    in bss descriptor from remote IBSS node.when victim connects to
    remote attacker, this may trigger buffer overflow.
    Fix them by putting the length check before performing copy.
    
    This fix addresses CVE-2019-14896 and CVE-2019-14897.
    This also fix build warning of mixed declarations and code.
    
    Reported-by: kbuild test robot <lkp@intel.com>
    Signed-off-by: Wen Huang <huangwenabc@gmail.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 6d8764d3b222716eda5050ecda0bc461080ce435
Author: Brian Norris <briannorris@chromium.org>
Date:   Mon Jan 6 14:42:12 2020 -0800

    mwifiex: fix unbalanced locking in mwifiex_process_country_ie()
    
    commit 65b1aae0d9d5962faccc06bdb8e91a2a0b09451c upstream.
    
    We called rcu_read_lock(), so we need to call rcu_read_unlock() before
    we return.
    
    Fixes: 3d94a4a8373b ("mwifiex: fix possible heap overflow in mwifiex_process_country_ie()")
    Cc: huangwen <huangwenabc@gmail.com>
    Cc: Ganapathi Bhat <ganapathi.bhat@nxp.com>
    Signed-off-by: Brian Norris <briannorris@chromium.org>
    Acked-by: Ganapathi Bhat <ganapathi.bhat@nxp.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    [bwh: Backported to 3.16: adjust filename, context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>