commit 8fc6167135d25cf6ba0258bb5284c68df7097443
Author: Ben Hutchings <ben@decadent.org.uk>
Date:   Fri Nov 22 15:57:34 2019 +0000

    Linux 3.16.78

commit d46b6bc7c7f77a36c5845e9173843e0716391cf9
Author: Hans van Kranenburg <hans.van.kranenburg@mendix.com>
Date:   Thu Oct 4 23:24:40 2018 +0200

    btrfs: alloc_chunk: fix more DUP stripe size handling
    
    commit baf92114c7e6dd6124aa3d506e4bc4b694da3bc3 upstream.
    
    Commit 92e222df7b "btrfs: alloc_chunk: fix DUP stripe size handling"
    fixed calculating the stripe_size for a new DUP chunk.
    
    However, the same calculation reappears a bit later, and that one was
    not changed yet. The resulting bug that is exposed is that the newly
    allocated device extents ('stripes') can have a few MiB overlap with the
    next thing stored after them, which is another device extent or the end
    of the disk.
    
    The scenario in which this can happen is:
    * The block device for the filesystem is less than 10GiB in size.
    * The amount of contiguous free unallocated disk space chosen to use for
      chunk allocation is 20% of the total device size, or a few MiB more or
      less.
    
    An example:
    - The filesystem device is 7880MiB (max_chunk_size gets set to 788MiB)
    - There's 1578MiB unallocated raw disk space left in one contiguous
      piece.
    
    In this case stripe_size is first calculated as 789MiB, (half of
    1578MiB).
    
    Since 789MiB (stripe_size * data_stripes) > 788MiB (max_chunk_size), we
    enter the if block. Now stripe_size value is immediately overwritten
    while calculating an adjusted value based on max_chunk_size, which ends
    up as 788MiB.
    
    Next, the value is rounded up to a 16MiB boundary, 800MiB, which is
    actually more than the value we had before. However, the last comparison
    fails to detect this, because it's comparing the value with the total
    amount of free space, which is about twice the size of stripe_size.
    
    In the example above, this means that the resulting raw disk space being
    allocated is 1600MiB, while only a gap of 1578MiB has been found. The
    second device extent object for this DUP chunk will overlap for 22MiB
    with whatever comes next.
    
    The underlying problem here is that the stripe_size is reused all the
    time for different things. So, when entering the code in the if block,
    stripe_size is immediately overwritten with something else. If later we
    decide we want to have the previous value back, then the logic to
    compute it was copy pasted in again.
    
    With this change, the value in stripe_size is not unnecessarily
    destroyed, so the duplicated calculation is not needed any more.
    
    Signed-off-by: Hans van Kranenburg <hans.van.kranenburg@mendix.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 52a4c5d2b5f792c869c0394c83d932614c64f83f
Author: Qu Wenruo <wqu@suse.com>
Date:   Wed Jan 31 14:16:34 2018 +0800

    btrfs: volumes: Cleanup stripe size calculation
    
    commit 793ff2c88c6397b3531c08cc4f920619b56a9def upstream.
    
    Cleanup the following things:
    1) open coded SZ_16M round up
    2) use min() to replace open-coded size comparison
    3) code style
    
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: Gu Jinxiang <gujx@cn.fujitsu.com>
    [ reformat comment ]
    Signed-off-by: David Sterba <dsterba@suse.com>
    [bwh: Backported to 3.16 as dependency of commit baf92114c7
     "btrfs: alloc_chunk: fix more DUP stripe size handling":
     - Add #include <linux/sizes.h> for definition of SZ_16M]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    Cc: Hans van Kranenburg <hans.van.kranenburg@mendix.com>

commit 4eeed526d58a3d35e91289e2397a6c9d4800afde
Author: Hans van Kranenburg <hans.van.kranenburg@mendix.com>
Date:   Wed Jan 23 20:03:49 2019 +0100

    btrfs: partially apply b8b93addde
    
    Extracted from commit b8b93addde "btrfs: cleanup 64bit/32bit divs,
    provably bounded values", to allow commits 793ff2c88c6 "btrfs:
    volumes: Cleanup stripe size calculation" and baf92114c7 "btrfs:
    alloc_chunk: fix more DUP stripe size handling" to apply cleanly.
    
    [bwh: Add patch description]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 31e2808f4dd3759d4cfe8369295624aa063ee3eb
Author: Nigel Croxon <ncroxon@redhat.com>
Date:   Tue Apr 16 09:50:09 2019 -0700

    md/raid: raid5 preserve the writeback action after the parity check
    
    commit b2176a1dfb518d870ee073445d27055fea64dfb8 upstream.
    
    The problem is that any 'uptodate' vs 'disks' check is not precise
    in this path. Put a "WARN_ON(!test_bit(R5_UPTODATE, &dev->flags)" on the
    device that might try to kick off writes and then skip the action.
    Better to prevent the raid driver from taking unexpected action *and* keep
    the system alive vs killing the machine with BUG_ON.
    
    Note: fixed warning reported by kbuild test robot <lkp@intel.com>
    
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
    Signed-off-by: Song Liu <songliubraving@fb.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit bc2152267439591e5d7cfc55a567eb4afb4d08f1
Author: Pavel Shilovsky <pshilov@microsoft.com>
Date:   Wed Oct 23 15:37:19 2019 -0700

    CIFS: Fix use after free of file info structures
    
    commit 1a67c415965752879e2e9fad407bc44fc7f25f23 upstream.
    
    Currently the code assumes that if a file info entry belongs
    to lists of open file handles of an inode and a tcon then
    it has non-zero reference. The recent changes broke that
    assumption when putting the last reference of the file info.
    There may be a situation when a file is being deleted but
    nothing prevents another thread to reference it again
    and start using it. This happens because we do not hold
    the inode list lock while checking the number of references
    of the file info structure. Fix this by doing the proper
    locking when doing the check.
    
    Fixes: 487317c99477d ("cifs: add spinlock for the openFileList to cifsInodeInfo")
    Fixes: cb248819d209d ("cifs: use cifsInodeInfo->open_file_lock while iterating to avoid a panic")
    Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
    Signed-off-by: Pavel Shilovsky <pshilov@microsoft.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 127f62164e57659830141115ea1697496cb5dc8e
Author: Dave Wysochanski <dwysocha@redhat.com>
Date:   Thu Oct 3 15:16:27 2019 +1000

    cifs: use cifsInodeInfo->open_file_lock while iterating to avoid a panic
    
    commit cb248819d209d113e45fed459773991518e8e80b upstream.
    
    Commit 487317c99477 ("cifs: add spinlock for the openFileList to
    cifsInodeInfo") added cifsInodeInfo->open_file_lock spin_lock to protect
    the openFileList, but missed a few places where cifs_inode->openFileList
    was enumerated.  Change these remaining tcon->open_file_lock to
    cifsInodeInfo->open_file_lock to avoid panic in is_size_safe_to_change.
    
    [17313.245641] RIP: 0010:is_size_safe_to_change+0x57/0xb0 [cifs]
    [17313.245645] Code: 68 40 48 89 ef e8 19 67 b7 f1 48 8b 43 40 48 8d 4b 40 48 8d 50 f0 48 39 c1 75 0f eb 47 48 8b 42 10 48 8d 50 f0 48 39 c1 74 3a <8b> 80 88 00 00 00 83 c0 01 a8 02 74 e6 48 89 ef c6 07 00 0f 1f 40
    [17313.245649] RSP: 0018:ffff94ae1baefa30 EFLAGS: 00010202
    [17313.245654] RAX: dead000000000100 RBX: ffff88dc72243300 RCX: ffff88dc72243340
    [17313.245657] RDX: dead0000000000f0 RSI: 00000000098f7940 RDI: ffff88dd3102f040
    [17313.245659] RBP: ffff88dd3102f040 R08: 0000000000000000 R09: ffff94ae1baefc40
    [17313.245661] R10: ffffcdc8bb1c4e80 R11: ffffcdc8b50adb08 R12: 00000000098f7940
    [17313.245663] R13: ffff88dc72243300 R14: ffff88dbc8f19600 R15: ffff88dc72243428
    [17313.245667] FS:  00007fb145485700(0000) GS:ffff88dd3e000000(0000) knlGS:0000000000000000
    [17313.245670] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [17313.245672] CR2: 0000026bb46c6000 CR3: 0000004edb110003 CR4: 00000000007606e0
    [17313.245753] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [17313.245756] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [17313.245759] PKRU: 55555554
    [17313.245761] Call Trace:
    [17313.245803]  cifs_fattr_to_inode+0x16b/0x580 [cifs]
    [17313.245838]  cifs_get_inode_info+0x35c/0xa60 [cifs]
    [17313.245852]  ? kmem_cache_alloc_trace+0x151/0x1d0
    [17313.245885]  cifs_open+0x38f/0x990 [cifs]
    [17313.245921]  ? cifs_revalidate_dentry_attr+0x3e/0x350 [cifs]
    [17313.245953]  ? cifsFileInfo_get+0x30/0x30 [cifs]
    [17313.245960]  ? do_dentry_open+0x132/0x330
    [17313.245963]  do_dentry_open+0x132/0x330
    [17313.245969]  path_openat+0x573/0x14d0
    [17313.245974]  do_filp_open+0x93/0x100
    [17313.245979]  ? __check_object_size+0xa3/0x181
    [17313.245986]  ? audit_alloc_name+0x7e/0xd0
    [17313.245992]  do_sys_open+0x184/0x220
    [17313.245999]  do_syscall_64+0x5b/0x1b0
    
    Fixes: 487317c99477 ("cifs: add spinlock for the openFileList to cifsInodeInfo")
    
    Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
    Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    Cc: Pavel Shilovskiy <pshilov@microsoft.com>

commit f0ec4d8d691a802fe5ee590298018f01884824c2
Author: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
Date:   Tue Sep 3 14:18:02 2019 -0300

    alarmtimer: Use EOPNOTSUPP instead of ENOTSUPP
    
    commit f18ddc13af981ce3c7b7f26925f099e7c6929aba upstream.
    
    ENOTSUPP is not supposed to be returned to userspace. This was found on an
    OpenPower machine, where the RTC does not support set_alarm.
    
    On that system, a clock_nanosleep(CLOCK_REALTIME_ALARM, ...) results in
    "524 Unknown error 524"
    
    Replace it with EOPNOTSUPP which results in the expected "95 Operation not
    supported" error.
    
    Fixes: 1c6b39ad3f01 (alarmtimers: Return -ENOTSUPP if no RTC device is present)
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lkml.kernel.org/r/20190903171802.28314-1-cascardo@canonical.com
    [ pvorel: backport for v3.16, changes also in alarm_timer_{del,set}(), which
    were removed in f2c45807d3992fe0f173f34af9c347d907c31686 in v4.13-rc1 ]
    Signed-off-by: Petr Vorel <pvorel@suse.cz>
    Acked-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit c2a8f1f365603f8f44507c05fa7dc2b750b41c33
Author: Vidya Sagar <vidyas@nvidia.com>
Date:   Thu Jul 4 20:34:28 2019 +0530

    PCI: tegra: Enable Relaxed Ordering only for Tegra20 & Tegra30
    
    commit 7be142caabc4780b13a522c485abc806de5c4114 upstream.
    
    The PCI Tegra controller conversion to a device tree configurable
    driver in commit d1523b52bff3 ("PCI: tegra: Move PCIe driver
    to drivers/pci/host") implied that code for the driver can be
    compiled in for a kernel supporting multiple platforms.
    
    Unfortunately, a blind move of the code did not check that some of the
    quirks that were applied in arch/arm (eg enabling Relaxed Ordering on
    all PCI devices - since the quirk hook erroneously matches PCI_ANY_ID
    for both Vendor-ID and Device-ID) are now applied in all kernels that
    compile the PCI Tegra controlled driver, DT and ACPI alike.
    
    This is completely wrong, in that enablement of Relaxed Ordering is only
    required by default in Tegra20 platforms as described in the Tegra20
    Technical Reference Manual (available at
    https://developer.nvidia.com/embedded/downloads#?search=tegra%202 in
    Section 34.1, where it is mentioned that Relaxed Ordering bit needs to
    be enabled in its root ports to avoid deadlock in hardware) and in the
    Tegra30 platforms for the same reasons (unfortunately not documented
    in the TRM).
    
    There is no other strict requirement on PCI devices Relaxed Ordering
    enablement on any other Tegra platforms or PCI host bridge driver.
    
    Fix this quite upsetting situation by limiting the vendor and device IDs
    to which the Relaxed Ordering quirk applies to the root ports in
    question, reported above.
    
    Signed-off-by: Vidya Sagar <vidyas@nvidia.com>
    [lorenzo.pieralisi@arm.com: completely rewrote the commit log/fixes tag]
    Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8f1425813e7617b02fd1e44b39f7f7c0e8dffa33
Author: Fuqian Huang <huangfq.daxian@gmail.com>
Date:   Thu Sep 12 12:18:17 2019 +0800

    KVM: x86: work around leak of uninitialized stack contents
    
    commit 541ab2aeb28251bf7135c7961f3a6080eebcc705 upstream.
    
    Emulation of VMPTRST can incorrectly inject a page fault
    when passed an operand that points to an MMIO address.
    The page fault will use uninitialized kernel stack memory
    as the CR2 and error code.
    
    The right behavior would be to abort the VM with a KVM_EXIT_INTERNAL_ERROR
    exit to userspace; however, it is not an easy fix, so for now just ensure
    that the error code and CR2 are zero.
    
    Signed-off-by: Fuqian Huang <huangfq.daxian@gmail.com>
    [add comment]
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit c43f8f535b5dfe6f41def0cb772b5f044f74de5d
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Sat Sep 14 00:26:27 2019 +0200

    KVM: nVMX: handle page fault in vmread
    
    commit f7eea636c3d505fe6f1d1066234f1aaf7171b681 upstream.
    
    The implementation of vmread to memory is still incomplete, as it
    lacks the ability to do vmread to I/O memory just like vmptrst.
    
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 6b81a8776711feee9645236d446c48a02f4c0a62
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Wed Sep 11 18:02:39 2019 +0200

    sctp: Fix the link time qualifier of 'sctp_ctrlsock_exit()'
    
    commit b456d72412ca8797234449c25815e82f4e1426c0 upstream.
    
    The '.exit' functions from 'pernet_operations' structure should be marked
    as __net_exit, not __net_init.
    
    Fixes: 8e2d61e0aed2 ("sctp: fix race on protocol/netns initialization")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit c6efe293fe6f584e0f6e67308f6a8ef476492748
Author: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Date:   Tue Sep 10 14:02:57 2019 -0600

    net: Fix null de-reference of device refcount
    
    commit 10cc514f451a0f239aa34f91bc9dc954a9397840 upstream.
    
    In event of failure during register_netdevice, free_netdev is
    invoked immediately. free_netdev assumes that all the netdevice
    refcounts have been dropped prior to it being called and as a
    result frees and clears out the refcount pointer.
    
    However, this is not necessarily true as some of the operations
    in the NETDEV_UNREGISTER notifier handlers queue RCU callbacks for
    invocation after a grace period. The IPv4 callback in_dev_rcu_put
    tries to access the refcount after free_netdev is called which
    leads to a null de-reference-
    
    44837.761523:   <6> Unable to handle kernel paging request at
                        virtual address 0000004a88287000
    44837.761651:   <2> pc : in_dev_finish_destroy+0x4c/0xc8
    44837.761654:   <2> lr : in_dev_finish_destroy+0x2c/0xc8
    44837.762393:   <2> Call trace:
    44837.762398:   <2>  in_dev_finish_destroy+0x4c/0xc8
    44837.762404:   <2>  in_dev_rcu_put+0x24/0x30
    44837.762412:   <2>  rcu_nocb_kthread+0x43c/0x468
    44837.762418:   <2>  kthread+0x118/0x128
    44837.762424:   <2>  ret_from_fork+0x10/0x1c
    
    Fix this by waiting for the completion of the call_rcu() in
    case of register_netdevice errors.
    
    Fixes: 93ee31f14f6f ("[NET]: Fix free_netdev on register_netdev failure.")
    Cc: Sean Tranchetti <stranche@codeaurora.org>
    Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e8b8edee6f5614fb237006103112e09861abfae7
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Tue Sep 10 13:29:59 2019 +0200

    ipv6: Fix the link time qualifier of 'ping_v6_proc_exit_net()'
    
    commit d23dbc479a8e813db4161a695d67da0e36557846 upstream.
    
    The '.exit' functions from 'pernet_operations' structure should be marked
    as __net_exit, not __net_init.
    
    Fixes: d862e5461423 ("net: ipv6: Implement /proc/net/icmp6.")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 9b3bfbbfa8b5ebeff76f81d620b8a3a36bc4c1f9
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Tue Sep 10 18:56:57 2019 +0800

    tun: fix use-after-free when register netdev failed
    
    commit 77f22f92dff8e7b45c7786a430626d38071d4670 upstream.
    
    I got a UAF repport in tun driver when doing fuzzy test:
    
    [  466.269490] ==================================================================
    [  466.271792] BUG: KASAN: use-after-free in tun_chr_read_iter+0x2ca/0x2d0
    [  466.271806] Read of size 8 at addr ffff888372139250 by task tun-test/2699
    [  466.271810]
    [  466.271824] CPU: 1 PID: 2699 Comm: tun-test Not tainted 5.3.0-rc1-00001-g5a9433db2614-dirty #427
    [  466.271833] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org 04/01/2014
    [  466.271838] Call Trace:
    [  466.271858]  dump_stack+0xca/0x13e
    [  466.271871]  ? tun_chr_read_iter+0x2ca/0x2d0
    [  466.271890]  print_address_description+0x79/0x440
    [  466.271906]  ? vprintk_func+0x5e/0xf0
    [  466.271920]  ? tun_chr_read_iter+0x2ca/0x2d0
    [  466.271935]  __kasan_report+0x15c/0x1df
    [  466.271958]  ? tun_chr_read_iter+0x2ca/0x2d0
    [  466.271976]  kasan_report+0xe/0x20
    [  466.271987]  tun_chr_read_iter+0x2ca/0x2d0
    [  466.272013]  do_iter_readv_writev+0x4b7/0x740
    [  466.272032]  ? default_llseek+0x2d0/0x2d0
    [  466.272072]  do_iter_read+0x1c5/0x5e0
    [  466.272110]  vfs_readv+0x108/0x180
    [  466.299007]  ? compat_rw_copy_check_uvector+0x440/0x440
    [  466.299020]  ? fsnotify+0x888/0xd50
    [  466.299040]  ? __fsnotify_parent+0xd0/0x350
    [  466.299064]  ? fsnotify_first_mark+0x1e0/0x1e0
    [  466.304548]  ? vfs_write+0x264/0x510
    [  466.304569]  ? ksys_write+0x101/0x210
    [  466.304591]  ? do_preadv+0x116/0x1a0
    [  466.304609]  do_preadv+0x116/0x1a0
    [  466.309829]  do_syscall_64+0xc8/0x600
    [  466.309849]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
    [  466.309861] RIP: 0033:0x4560f9
    [  466.309875] Code: 00 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 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 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
    [  466.309889] RSP: 002b:00007ffffa5166e8 EFLAGS: 00000206 ORIG_RAX: 0000000000000127
    [  466.322992] RAX: ffffffffffffffda RBX: 0000000000400460 RCX: 00000000004560f9
    [  466.322999] RDX: 0000000000000003 RSI: 00000000200008c0 RDI: 0000000000000003
    [  466.323007] RBP: 00007ffffa516700 R08: 0000000000000004 R09: 0000000000000000
    [  466.323014] R10: 0000000000000000 R11: 0000000000000206 R12: 000000000040cb10
    [  466.323021] R13: 0000000000000000 R14: 00000000006d7018 R15: 0000000000000000
    [  466.323057]
    [  466.323064] Allocated by task 2605:
    [  466.335165]  save_stack+0x19/0x80
    [  466.336240]  __kasan_kmalloc.constprop.8+0xa0/0xd0
    [  466.337755]  kmem_cache_alloc+0xe8/0x320
    [  466.339050]  getname_flags+0xca/0x560
    [  466.340229]  user_path_at_empty+0x2c/0x50
    [  466.341508]  vfs_statx+0xe6/0x190
    [  466.342619]  __do_sys_newstat+0x81/0x100
    [  466.343908]  do_syscall_64+0xc8/0x600
    [  466.345303]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
    [  466.347034]
    [  466.347517] Freed by task 2605:
    [  466.348471]  save_stack+0x19/0x80
    [  466.349476]  __kasan_slab_free+0x12e/0x180
    [  466.350726]  kmem_cache_free+0xc8/0x430
    [  466.351874]  putname+0xe2/0x120
    [  466.352921]  filename_lookup+0x257/0x3e0
    [  466.354319]  vfs_statx+0xe6/0x190
    [  466.355498]  __do_sys_newstat+0x81/0x100
    [  466.356889]  do_syscall_64+0xc8/0x600
    [  466.358037]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
    [  466.359567]
    [  466.360050] The buggy address belongs to the object at ffff888372139100
    [  466.360050]  which belongs to the cache names_cache of size 4096
    [  466.363735] The buggy address is located 336 bytes inside of
    [  466.363735]  4096-byte region [ffff888372139100, ffff88837213a100)
    [  466.367179] The buggy address belongs to the page:
    [  466.368604] page:ffffea000dc84e00 refcount:1 mapcount:0 mapping:ffff8883df1b4f00 index:0x0 compound_mapcount: 0
    [  466.371582] flags: 0x2fffff80010200(slab|head)
    [  466.372910] raw: 002fffff80010200 dead000000000100 dead000000000122 ffff8883df1b4f00
    [  466.375209] raw: 0000000000000000 0000000000070007 00000001ffffffff 0000000000000000
    [  466.377778] page dumped because: kasan: bad access detected
    [  466.379730]
    [  466.380288] Memory state around the buggy address:
    [  466.381844]  ffff888372139100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  466.384009]  ffff888372139180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  466.386131] >ffff888372139200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  466.388257]                                                  ^
    [  466.390234]  ffff888372139280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  466.392512]  ffff888372139300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  466.394667] ==================================================================
    
    tun_chr_read_iter() accessed the memory which freed by free_netdev()
    called by tun_set_iff():
    
            CPUA                                           CPUB
      tun_set_iff()
        alloc_netdev_mqs()
        tun_attach()
                                                      tun_chr_read_iter()
                                                        tun_get()
                                                        tun_do_read()
                                                          tun_ring_recv()
        register_netdevice() <-- inject error
        goto err_detach
        tun_detach_all() <-- set RCV_SHUTDOWN
        free_netdev() <-- called from
                         err_free_dev path
          netdev_freemem() <-- free the memory
                            without check refcount
          (In this path, the refcount cannot prevent
           freeing the memory of dev, and the memory
           will be used by dev_put() called by
           tun_chr_read_iter() on CPUB.)
                                                         (Break from tun_ring_recv(),
                                                         because RCV_SHUTDOWN is set)
                                                       tun_put()
                                                         dev_put() <-- use the memory
                                                                       freed by netdev_freemem()
    
    Put the publishing of tfile->tun after register_netdevice(),
    so tun_get() won't get the tun pointer that freed by
    err_detach path if register_netdevice() failed.
    
    Fixes: eb0fb363f920 ("tuntap: attach queue 0 before registering netdevice")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Suggested-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b82e198c5c252b12b8b0878494aee6c8535da98f
Author: Neal Cardwell <ncardwell@google.com>
Date:   Mon Sep 9 16:56:02 2019 -0400

    tcp: fix tcp_ecn_withdraw_cwr() to clear TCP_ECN_QUEUE_CWR
    
    commit af38d07ed391b21f7405fa1f936ca9686787d6d2 upstream.
    
    Fix tcp_ecn_withdraw_cwr() to clear the correct bit:
    TCP_ECN_QUEUE_CWR.
    
    Rationale: basically, TCP_ECN_DEMAND_CWR is a bit that is purely about
    the behavior of data receivers, and deciding whether to reflect
    incoming IP ECN CE marks as outgoing TCP th->ece marks. The
    TCP_ECN_QUEUE_CWR bit is purely about the behavior of data senders,
    and deciding whether to send CWR. The tcp_ecn_withdraw_cwr() function
    is only called from tcp_undo_cwnd_reduction() by data senders during
    an undo, so it should zero the sender-side state,
    TCP_ECN_QUEUE_CWR. It does not make sense to stop the reflection of
    incoming CE bits on incoming data packets just because outgoing
    packets were spuriously retransmitted.
    
    The bug has been reproduced with packetdrill to manifest in a scenario
    with RFC3168 ECN, with an incoming data packet with CE bit set and
    carrying a TCP timestamp value that causes cwnd undo. Before this fix,
    the IP CE bit was ignored and not reflected in the TCP ECE header bit,
    and sender sent a TCP CWR ('W') bit on the next outgoing data packet,
    even though the cwnd reduction had been undone.  After this fix, the
    sender properly reflects the CE bit and does not set the W bit.
    
    Note: the bug actually predates 2005 git history; this Fixes footer is
    chosen to be the oldest SHA1 I have tested (from Sep 2007) for which
    the patch applies cleanly (since before this commit the code was in a
    .h file).
    
    Fixes: bdf1ee5d3bd3 ("[TCP]: Move code from tcp_ecn.h to tcp*.c and tcp.h & remove it")
    Signed-off-by: Neal Cardwell <ncardwell@google.com>
    Acked-by: Yuchung Cheng <ycheng@google.com>
    Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
    Cc: Eric Dumazet <edumazet@google.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 1fc84010452f18747ace1c71014edaaa426184f3
Author: Cong Wang <xiyou.wangcong@gmail.com>
Date:   Sun Sep 8 13:40:51 2019 -0700

    sch_hhf: ensure quantum and hhf_non_hh_weight are non-zero
    
    commit d4d6ec6dac07f263f06d847d6f732d6855522845 upstream.
    
    In case of TCA_HHF_NON_HH_WEIGHT or TCA_HHF_QUANTUM is zero,
    it would make no progress inside the loop in hhf_dequeue() thus
    kernel would get stuck.
    
    Fix this by checking this corner case in hhf_change().
    
    Fixes: 10239edf86f1 ("net-qdisc-hhf: Heavy-Hitter Filter (HHF) qdisc")
    Reported-by: syzbot+bc6297c11f19ee807dc2@syzkaller.appspotmail.com
    Reported-by: syzbot+041483004a7f45f1f20a@syzkaller.appspotmail.com
    Reported-by: syzbot+55be5f513bed37fc4367@syzkaller.appspotmail.com
    Cc: Jamal Hadi Salim <jhs@mojatatu.com>
    Cc: Jiri Pirko <jiri@resnulli.us>
    Cc: Terry Lam <vtlam@google.com>
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3efd83051d52f492e5b6226fce58fcd35d0f372f
Author: Hillf Danton <hdanton@sina.com>
Date:   Mon Sep 2 13:37:29 2019 +0100

    keys: Fix missing null pointer check in request_key_auth_describe()
    
    commit d41a3effbb53b1bcea41e328d16a4d046a508381 upstream.
    
    If a request_key authentication token key gets revoked, there's a window in
    which request_key_auth_describe() can see it with a NULL payload - but it
    makes no check for this and something like the following oops may occur:
    
            BUG: Kernel NULL pointer dereference at 0x00000038
            Faulting instruction address: 0xc0000000004ddf30
            Oops: Kernel access of bad area, sig: 11 [#1]
            ...
            NIP [...] request_key_auth_describe+0x90/0xd0
            LR [...] request_key_auth_describe+0x54/0xd0
            Call Trace:
            [...] request_key_auth_describe+0x54/0xd0 (unreliable)
            [...] proc_keys_show+0x308/0x4c0
            [...] seq_read+0x3d0/0x540
            [...] proc_reg_read+0x90/0x110
            [...] __vfs_read+0x3c/0x70
            [...] vfs_read+0xb4/0x1b0
            [...] ksys_read+0x7c/0x130
            [...] system_call+0x5c/0x70
    
    Fix this by checking for a NULL pointer when describing such a key.
    
    Also make the read routine check for a NULL pointer to be on the safe side.
    
    [DH: Modified to not take already-held rcu lock and modified to also check
     in the read routine]
    
    Fixes: 04c567d9313e ("[PATCH] Keys: Fix race between two instantiators of a key")
    Reported-by: Sachin Sant <sachinp@linux.vnet.ibm.com>
    Signed-off-by: Hillf Danton <hdanton@sina.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Tested-by: Sachin Sant <sachinp@linux.vnet.ibm.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b1aa60212e235496f006f0b51e293c6133dd8357
Author: Yunfeng Ye <yeyunfeng@huawei.com>
Date:   Wed Sep 4 20:46:25 2019 +0800

    genirq: Prevent NULL pointer dereference in resend_irqs()
    
    commit eddf3e9c7c7e4d0707c68d1bb22cc6ec8aef7d4a upstream.
    
    The following crash was observed:
    
      Unable to handle kernel NULL pointer dereference at 0000000000000158
      Internal error: Oops: 96000004 [#1] SMP
      pc : resend_irqs+0x68/0xb0
      lr : resend_irqs+0x64/0xb0
      ...
      Call trace:
       resend_irqs+0x68/0xb0
       tasklet_action_common.isra.6+0x84/0x138
       tasklet_action+0x2c/0x38
       __do_softirq+0x120/0x324
       run_ksoftirqd+0x44/0x60
       smpboot_thread_fn+0x1ac/0x1e8
       kthread+0x134/0x138
       ret_from_fork+0x10/0x18
    
    The reason for this is that the interrupt resend mechanism happens in soft
    interrupt context, which is a asynchronous mechanism versus other
    operations on interrupts. free_irq() does not take resend handling into
    account. Thus, the irq descriptor might be already freed before the resend
    tasklet is executed. resend_irqs() does not check the return value of the
    interrupt descriptor lookup and derefences the return value
    unconditionally.
    
      1):
      __setup_irq
        irq_startup
          check_irq_resend  // activate softirq to handle resend irq
      2):
      irq_domain_free_irqs
        irq_free_descs
          free_desc
            call_rcu(&desc->rcu, delayed_free_desc)
      3):
      __do_softirq
        tasklet_action
          resend_irqs
            desc = irq_to_desc(irq)
            desc->handle_irq(desc)  // desc is NULL --> Ooops
    
    Fix this by adding a NULL pointer check in resend_irqs() before derefencing
    the irq descriptor.
    
    Fixes: a4633adcdbc1 ("[PATCH] genirq: add genirq sw IRQ-retrigger")
    Signed-off-by: Yunfeng Ye <yeyunfeng@huawei.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
    Link: https://lkml.kernel.org/r/1630ae13-5c8e-901e-de09-e740b6a426a7@huawei.com
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit db3f75d04d3443359119e2b9c808630bd52a1c9f
Author: Xin Long <lucien.xin@gmail.com>
Date:   Mon Sep 2 23:24:21 2019 +0800

    sctp: use transport pf_retrans in sctp_do_8_2_transport_strike
    
    commit 10eb56c582c557c629271f1ee31e15e7a9b2558b upstream.
    
    Transport should use its own pf_retrans to do the error_count
    check, instead of asoc's. Otherwise, it's meaningless to make
    pf_retrans per transport.
    
    Fixes: 5aa93bcf66f4 ("sctp: Implement quick failover draft from tsvwg")
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Acked-by: Neil Horman <nhorman@tuxdriver.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7ddf32d19160f2db4909077e378edcb1b006bd23
Author: Tiwei Bie <tiwei.bie@intel.com>
Date:   Wed Aug 28 13:37:00 2019 +0800

    vhost/test: fix build for vhost test
    
    commit 264b563b8675771834419057cbe076c1a41fb666 upstream.
    
    Since vhost_exceeds_weight() was introduced, callers need to specify
    the packet weight and byte weight in vhost_dev_init(). Note that, the
    packet weight isn't counted in this patch to keep the original behavior
    unchanged.
    
    Fixes: e82b9b0727ff ("vhost: introduce vhost_exceeds_weight()")
    Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    [bwh: Backported to 3.16: vhost_dev_init() still doesn't take an iov_limit
     parameter.]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 734653b4bf8cdd9d3885093692c36134bc5e1e4f
Author: Liangyan <liangyan.peng@linux.alibaba.com>
Date:   Mon Aug 26 20:16:33 2019 +0800

    sched/fair: Don't assign runtime for throttled cfs_rq
    
    commit 5e2d2cc2588bd3307ce3937acbc2ed03c830a861 upstream.
    
    do_sched_cfs_period_timer() will refill cfs_b runtime and call
    distribute_cfs_runtime to unthrottle cfs_rq, sometimes cfs_b->runtime
    will allocate all quota to one cfs_rq incorrectly, then other cfs_rqs
    attached to this cfs_b can't get runtime and will be throttled.
    
    We find that one throttled cfs_rq has non-negative
    cfs_rq->runtime_remaining and cause an unexpetced cast from s64 to u64
    in snippet:
    
      distribute_cfs_runtime() {
        runtime = -cfs_rq->runtime_remaining + 1;
      }
    
    The runtime here will change to a large number and consume all
    cfs_b->runtime in this cfs_b period.
    
    According to Ben Segall, the throttled cfs_rq can have
    account_cfs_rq_runtime called on it because it is throttled before
    idle_balance, and the idle_balance calls update_rq_clock to add time
    that is accounted to the task.
    
    This commit prevents cfs_rq to be assgined new runtime if it has been
    throttled until that distribute_cfs_runtime is called.
    
    Signed-off-by: Liangyan <liangyan.peng@linux.alibaba.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
    Reviewed-by: Ben Segall <bsegall@google.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: shanpeic@linux.alibaba.com
    Cc: xlpang@linux.alibaba.com
    Fixes: d3d9dc330236 ("sched: Throttle entities exceeding their allowed bandwidth")
    Link: https://lkml.kernel.org/r/20190826121633.6538-1-liangyan.peng@linux.alibaba.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    [bwh: Backported to 3.16: Open-code SCHED_WARN_ON().]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit fe9f8517515917570e1e63f88373f5c4f31319bc
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat Aug 31 09:17:51 2019 +0200

    net: seeq: Fix the function used to release some memory in an error handling path
    
    commit e1e54ec7fb55501c33b117c111cb0a045b8eded2 upstream.
    
    In commit 99cd149efe82 ("sgiseeq: replace use of dma_cache_wback_inv"),
    a call to 'get_zeroed_page()' has been turned into a call to
    'dma_alloc_coherent()'. Only the remove function has been updated to turn
    the corresponding 'free_page()' into 'dma_free_attrs()'.
    The error hndling path of the probe function has not been updated.
    
    Fix it now.
    
    Rename the corresponding label to something more in line.
    
    Fixes: 99cd149efe82 ("sgiseeq: replace use of dma_cache_wback_inv")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Reviewed-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5b4437a7ecf7cbf5eae3e47fd4f8441e81cf313e
Author: Ulf Hansson <ulf.hansson@linaro.org>
Date:   Tue Aug 27 10:10:43 2019 +0200

    mmc: core: Fix init of SD cards reporting an invalid VDD range
    
    commit 72741084d903e65e121c27bd29494d941729d4a1 upstream.
    
    The OCR register defines the supported range of VDD voltages for SD cards.
    However, it has turned out that some SD cards reports an invalid voltage
    range, for example having bit7 set.
    
    When a host supports MMC_CAP2_FULL_PWR_CYCLE and some of the voltages from
    the invalid VDD range, this triggers the core to run a power cycle of the
    card to try to initialize it at the lowest common supported voltage.
    Obviously this fails, since the card can't support it.
    
    Let's fix this problem, by clearing invalid bits from the read OCR register
    for SD cards, before proceeding with the VDD voltage negotiation.
    
    Reported-by: Philip Langdale <philipl@overt.org>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Reviewed-by: Philip Langdale <philipl@overt.org>
    Tested-by: Philip Langdale <philipl@overt.org>
    Tested-by: Manuel Presnitz <mail@mpy.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit fe52dc85faff1c5805f7b85b488c74b7a1d17a54
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Aug 29 09:52:02 2019 +0200

    ALSA: hda - Fix potential endless loop at applying quirks
    
    commit 333f31436d3db19f4286f8862a00ea1d8d8420a1 upstream.
    
    Since the chained quirks via chained_before flag is applied before the
    depth check, it may lead to the endless recursive calls, when the
    chain were set up incorrectly.  Fix it by moving the depth check at
    the beginning of the loop.
    
    Fixes: 1f57825077dc ("ALSA: hda - Add chained_before flag to the fixup entry")
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 34f741652dc1f0b2cd2ce2554ec9c601f095eed7
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Aug 27 03:33:12 2019 -0700

    mld: fix memory leak in mld_del_delrec()
    
    commit a84d016479896b5526a2cc54784e6ffc41c9d6f6 upstream.
    
    Similar to the fix done for IPv4 in commit e5b1c6c6277d
    ("igmp: fix memory leak in igmpv3_del_delrec()"), we need to
    make sure mca_tomb and mca_sources are not blindly overwritten.
    
    Using swap() then a call to ip6_mc_clear_src() will take care
    of the missing free.
    
    BUG: memory leak
    unreferenced object 0xffff888117d9db00 (size 64):
      comm "syz-executor247", pid 6918, jiffies 4294943989 (age 25.350s)
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 fe 88 00 00 00 00 00 00  ................
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<000000005b463030>] kmemleak_alloc_recursive include/linux/kmemleak.h:43 [inline]
        [<000000005b463030>] slab_post_alloc_hook mm/slab.h:522 [inline]
        [<000000005b463030>] slab_alloc mm/slab.c:3319 [inline]
        [<000000005b463030>] kmem_cache_alloc_trace+0x145/0x2c0 mm/slab.c:3548
        [<00000000939cbf94>] kmalloc include/linux/slab.h:552 [inline]
        [<00000000939cbf94>] kzalloc include/linux/slab.h:748 [inline]
        [<00000000939cbf94>] ip6_mc_add1_src net/ipv6/mcast.c:2236 [inline]
        [<00000000939cbf94>] ip6_mc_add_src+0x31f/0x420 net/ipv6/mcast.c:2356
        [<00000000d8972221>] ip6_mc_source+0x4a8/0x600 net/ipv6/mcast.c:449
        [<000000002b203d0d>] do_ipv6_setsockopt.isra.0+0x1b92/0x1dd0 net/ipv6/ipv6_sockglue.c:748
        [<000000001f1e2d54>] ipv6_setsockopt+0x89/0xd0 net/ipv6/ipv6_sockglue.c:944
        [<00000000c8f7bdf9>] udpv6_setsockopt+0x4e/0x90 net/ipv6/udp.c:1558
        [<000000005a9a0c5e>] sock_common_setsockopt+0x38/0x50 net/core/sock.c:3139
        [<00000000910b37b2>] __sys_setsockopt+0x10f/0x220 net/socket.c:2084
        [<00000000e9108023>] __do_sys_setsockopt net/socket.c:2100 [inline]
        [<00000000e9108023>] __se_sys_setsockopt net/socket.c:2097 [inline]
        [<00000000e9108023>] __x64_sys_setsockopt+0x26/0x30 net/socket.c:2097
        [<00000000f4818160>] do_syscall_64+0x76/0x1a0 arch/x86/entry/common.c:296
        [<000000008d367e8f>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Fixes: 1666d49e1d41 ("mld: do not remove mld souce list info when set link down")
    Fixes: 9c8bb163ae78 ("igmp, mld: Fix memory leak in igmpv3/mld_del_delrec()")
    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 1ca900d5d47b61ca3a2108e23b09c34eca32c074
Author: Nadav Amit <namit@vmware.com>
Date:   Tue Aug 20 13:26:38 2019 -0700

    VMCI: Release resource if the work is already queued
    
    commit ba03a9bbd17b149c373c0ea44017f35fc2cd0f28 upstream.
    
    Francois reported that VMware balloon gets stuck after a balloon reset,
    when the VMCI doorbell is removed. A similar error can occur when the
    balloon driver is removed with the following splat:
    
    [ 1088.622000] INFO: task modprobe:3565 blocked for more than 120 seconds.
    [ 1088.622035]       Tainted: G        W         5.2.0 #4
    [ 1088.622087] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    [ 1088.622205] modprobe        D    0  3565   1450 0x00000000
    [ 1088.622210] Call Trace:
    [ 1088.622246]  __schedule+0x2a8/0x690
    [ 1088.622248]  schedule+0x2d/0x90
    [ 1088.622250]  schedule_timeout+0x1d3/0x2f0
    [ 1088.622252]  wait_for_completion+0xba/0x140
    [ 1088.622320]  ? wake_up_q+0x80/0x80
    [ 1088.622370]  vmci_resource_remove+0xb9/0xc0 [vmw_vmci]
    [ 1088.622373]  vmci_doorbell_destroy+0x9e/0xd0 [vmw_vmci]
    [ 1088.622379]  vmballoon_vmci_cleanup+0x6e/0xf0 [vmw_balloon]
    [ 1088.622381]  vmballoon_exit+0x18/0xcc8 [vmw_balloon]
    [ 1088.622394]  __x64_sys_delete_module+0x146/0x280
    [ 1088.622408]  do_syscall_64+0x5a/0x130
    [ 1088.622410]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [ 1088.622415] RIP: 0033:0x7f54f62791b7
    [ 1088.622421] Code: Bad RIP value.
    [ 1088.622421] RSP: 002b:00007fff2a949008 EFLAGS: 00000206 ORIG_RAX: 00000000000000b0
    [ 1088.622426] RAX: ffffffffffffffda RBX: 000055dff8b55d00 RCX: 00007f54f62791b7
    [ 1088.622426] RDX: 0000000000000000 RSI: 0000000000000800 RDI: 000055dff8b55d68
    [ 1088.622427] RBP: 000055dff8b55d00 R08: 00007fff2a947fb1 R09: 0000000000000000
    [ 1088.622427] R10: 00007f54f62f5cc0 R11: 0000000000000206 R12: 000055dff8b55d68
    [ 1088.622428] R13: 0000000000000001 R14: 000055dff8b55d68 R15: 00007fff2a94a3f0
    
    The cause for the bug is that when the "delayed" doorbell is invoked, it
    takes a reference on the doorbell entry and schedules work that is
    supposed to run the appropriate code and drop the doorbell entry
    reference. The code ignores the fact that if the work is already queued,
    it will not be scheduled to run one more time. As a result one of the
    references would not be dropped. When the code waits for the reference
    to get to zero, during balloon reset or module removal, it gets stuck.
    
    Fix it. Drop the reference if schedule_work() indicates that the work is
    already queued.
    
    Note that this bug got more apparent (or apparent at all) due to
    commit ce664331b248 ("vmw_balloon: VMCI_DOORBELL_SET does not check status").
    
    Fixes: 83e2ec765be03 ("VMCI: doorbell implementation.")
    Reported-by: Francois Rigault <rigault.francois@gmail.com>
    Cc: Jorgen Hansen <jhansen@vmware.com>
    Cc: Adit Ranadive <aditr@vmware.com>
    Cc: Alexios Zavras <alexios.zavras@intel.com>
    Cc: Vishnu DASA <vdasa@vmware.com>
    Signed-off-by: Nadav Amit <namit@vmware.com>
    Reviewed-by: Vishnu Dasa <vdasa@vmware.com>
    Link: https://lore.kernel.org/r/20190820202638.49003-1-namit@vmware.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8ea802dbe8b946e91440c09304f604bea9974184
Author: Oliver Neukum <oneukum@suse.com>
Date:   Tue Aug 27 12:34:36 2019 +0200

    USB: cdc-wdm: fix race between write and disconnect due to flag abuse
    
    commit 1426bd2c9f7e3126e2678e7469dca9fd9fc6dd3e upstream.
    
    In case of a disconnect an ongoing flush() has to be made fail.
    Nevertheless we cannot be sure that any pending URB has already
    finished, so although they will never succeed, they still must
    not be touched.
    The clean solution for this is to check for WDM_IN_USE
    and WDM_DISCONNECTED in flush(). There is no point in ever
    clearing WDM_IN_USE, as no further writes make sense.
    
    The issue is as old as the driver.
    
    Fixes: afba937e540c9 ("USB: CDC WDM driver")
    Reported-by: syzbot+d232cca6ec42c2edb3fc@syzkaller.appspotmail.com
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Link: https://lore.kernel.org/r/20190827103436.21143-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7bc5498a41bc9d6d1db66144d26df3cba56f3ba4
Author: Kai-Heng Feng <kai.heng.feng@canonical.com>
Date:   Wed Aug 28 01:34:50 2019 +0800

    USB: storage: ums-realtek: Whitelist auto-delink support
    
    commit 1902a01e2bcc3abd7c9a18dc05e78c7ab4a53c54 upstream.
    
    Auto-delink requires writing special registers to ums-realtek devices.
    Unconditionally enable auto-delink may break newer devices.
    
    So only enable auto-delink by default for the original three IDs,
    0x0138, 0x0158 and 0x0159.
    
    Realtek is working on a patch to properly support auto-delink for other
    IDs.
    
    BugLink: https://bugs.launchpad.net/bugs/1838886
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20190827173450.13572-2-kai.heng.feng@canonical.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2d09edaefebfa94528c1509364b21bdf0ec62aa5
Author: Kai-Heng Feng <kai.heng.feng@canonical.com>
Date:   Wed Aug 28 01:34:49 2019 +0800

    USB: storage: ums-realtek: Update module parameter description for auto_delink_en
    
    commit f6445b6b2f2bb1745080af4a0926049e8bca2617 upstream.
    
    The option named "auto_delink_en" is a bit misleading, as setting it to
    false doesn't really disable auto-delink but let auto-delink be firmware
    controlled.
    
    Update the description to reflect the real usage of this parameter.
    
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    Link: https://lore.kernel.org/r/20190827173450.13572-1-kai.heng.feng@canonical.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit b45a88d1816dd13a879b5bd0bf360394382e041f
Author: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Date:   Tue Aug 27 12:51:50 2019 +0900

    usb: host: ohci: fix a race condition between shutdown and irq
    
    commit a349b95d7ca0cea71be4a7dac29830703de7eb62 upstream.
    
    This patch fixes an issue that the following error is
    possible to happen when ohci hardware causes an interruption
    and the system is shutting down at the same time.
    
    [   34.851754] usb 2-1: USB disconnect, device number 2
    [   35.166658] irq 156: nobody cared (try booting with the "irqpoll" option)
    [   35.173445] CPU: 0 PID: 22 Comm: kworker/0:1 Not tainted 5.3.0-rc5 #85
    [   35.179964] Hardware name: Renesas Salvator-X 2nd version board based on r8a77965 (DT)
    [   35.187886] Workqueue: usb_hub_wq hub_event
    [   35.192063] Call trace:
    [   35.194509]  dump_backtrace+0x0/0x150
    [   35.198165]  show_stack+0x14/0x20
    [   35.201475]  dump_stack+0xa0/0xc4
    [   35.204785]  __report_bad_irq+0x34/0xe8
    [   35.208614]  note_interrupt+0x2cc/0x318
    [   35.212446]  handle_irq_event_percpu+0x5c/0x88
    [   35.216883]  handle_irq_event+0x48/0x78
    [   35.220712]  handle_fasteoi_irq+0xb4/0x188
    [   35.224802]  generic_handle_irq+0x24/0x38
    [   35.228804]  __handle_domain_irq+0x5c/0xb0
    [   35.232893]  gic_handle_irq+0x58/0xa8
    [   35.236548]  el1_irq+0xb8/0x180
    [   35.239681]  __do_softirq+0x94/0x23c
    [   35.243253]  irq_exit+0xd0/0xd8
    [   35.246387]  __handle_domain_irq+0x60/0xb0
    [   35.250475]  gic_handle_irq+0x58/0xa8
    [   35.254130]  el1_irq+0xb8/0x180
    [   35.257268]  kernfs_find_ns+0x5c/0x120
    [   35.261010]  kernfs_find_and_get_ns+0x3c/0x60
    [   35.265361]  sysfs_unmerge_group+0x20/0x68
    [   35.269454]  dpm_sysfs_remove+0x2c/0x68
    [   35.273284]  device_del+0x80/0x370
    [   35.276683]  hid_destroy_device+0x28/0x60
    [   35.280686]  usbhid_disconnect+0x4c/0x80
    [   35.284602]  usb_unbind_interface+0x6c/0x268
    [   35.288867]  device_release_driver_internal+0xe4/0x1b0
    [   35.293998]  device_release_driver+0x14/0x20
    [   35.298261]  bus_remove_device+0x110/0x128
    [   35.302350]  device_del+0x148/0x370
    [   35.305832]  usb_disable_device+0x8c/0x1d0
    [   35.309921]  usb_disconnect+0xc8/0x2d0
    [   35.313663]  hub_event+0x6e0/0x1128
    [   35.317146]  process_one_work+0x1e0/0x320
    [   35.321148]  worker_thread+0x40/0x450
    [   35.324805]  kthread+0x124/0x128
    [   35.328027]  ret_from_fork+0x10/0x18
    [   35.331594] handlers:
    [   35.333862] [<0000000079300c1d>] usb_hcd_irq
    [   35.338126] [<0000000079300c1d>] usb_hcd_irq
    [   35.342389] Disabling IRQ #156
    
    ohci_shutdown() disables all the interrupt and rh_state is set to
    OHCI_RH_HALTED. In other hand, ohci_irq() is possible to enable
    OHCI_INTR_SF and OHCI_INTR_MIE on ohci_irq(). Note that OHCI_INTR_SF
    is possible to be set by start_ed_unlink() which is called:
     ohci_irq()
      -> process_done_list()
       -> takeback_td()
        -> start_ed_unlink()
    
    So, ohci_irq() has the following condition, the issue happens by
    &ohci->regs->intrenable = OHCI_INTR_MIE | OHCI_INTR_SF and
    ohci->rh_state = OHCI_RH_HALTED:
    
            /* interrupt for some other device? */
            if (ints == 0 || unlikely(ohci->rh_state == OHCI_RH_HALTED))
                    return IRQ_NOTMINE;
    
    To fix the issue, ohci_shutdown() holds the spin lock while disabling
    the interruption and changing the rh_state flag to prevent reenable
    the OHCI_INTR_MIE unexpectedly. Note that io_watchdog_func() also
    calls the ohci_shutdown() and it already held the spin lock, so that
    the patch makes a new function as _ohci_shutdown().
    
    This patch is inspired by a Renesas R-Car Gen3 BSP patch
    from Tho Vu.
    
    Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/1566877910-6020-1-git-send-email-yoshihiro.shimoda.uh@renesas.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [bwh: Backported to 3.16:
     - Drop change in io_watchdog_func()
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e4185077d3cdd254a84f98ef4ed7ccaf61771d59
Author: Jan Beulich <jbeulich@suse.com>
Date:   Tue Oct 29 10:34:19 2019 +0100

    x86/apic/32: Avoid bogus LDR warnings
    
    commit fe6f85ca121e9c74e7490fe66b0c5aae38e332c3 upstream.
    
    The removal of the LDR initialization in the bigsmp_32 APIC code unearthed
    a problem in setup_local_APIC().
    
    The code checks unconditionally for a mismatch of the logical APIC id by
    comparing the early APIC id which was initialized in get_smp_config() with
    the actual LDR value in the APIC.
    
    Due to the removal of the bogus LDR initialization the check now can
    trigger on bigsmp_32 APIC systems emitting a warning for every booting
    CPU. This is of course a false positive because the APIC is not using
    logical destination mode.
    
    Restrict the check and the possibly resulting fixup to systems which are
    actually using the APIC in logical destination mode.
    
    [ tglx: Massaged changelog and added Cc stable ]
    
    Fixes: bae3a8d3308 ("x86/apic: Do not initialize LDR and DFR for bigsmp")
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lkml.kernel.org/r/666d8f91-b5a8-1afd-7add-821e72a35f03@suse.com
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 524608cbf01e9b08aa72229a80a7391b90262022
Author: Dou Liyang <douly.fnst@cn.fujitsu.com>
Date:   Thu Mar 1 13:59:30 2018 +0800

    x86/apic: Drop logical_smp_processor_id() inline
    
    commit 8f1561680f42a5491b371b513f1ab8197f31fd62 upstream.
    
    The logical_smp_processor_id() inline which is only called in
    setup_local_APIC() on x86_32 systems has no real value.
    
    Drop it and directly use GET_APIC_LOGICAL_ID() at the call site and use a
    more suitable variable name for readability
    
    Signed-off-by: Dou Liyang <douly.fnst@cn.fujitsu.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: andy.shevchenko@gmail.com
    Cc: bhe@redhat.com
    Cc: ebiederm@xmission.com
    Link: https://lkml.kernel.org/r/20180301055930.2396-4-douly.fnst@cn.fujitsu.com
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit bbae843aa0432e45131feb9767bba375081979f0
Author: Bandan Das <bsd@redhat.com>
Date:   Mon Aug 26 06:15:12 2019 -0400

    x86/apic: Do not initialize LDR and DFR for bigsmp
    
    commit bae3a8d3308ee69a7dbdf145911b18dfda8ade0d upstream.
    
    Legacy apic init uses bigsmp for smp systems with 8 and more CPUs. The
    bigsmp APIC implementation uses physical destination mode, but it
    nevertheless initializes LDR and DFR. The LDR even ends up incorrectly with
    multiple bit being set.
    
    This does not cause a functional problem because LDR and DFR are ignored
    when physical destination mode is active, but it triggered a problem on a
    32-bit KVM guest which jumps into a kdump kernel.
    
    The multiple bits set unearthed a bug in the KVM APIC implementation. The
    code which creates the logical destination map for VCPUs ignores the
    disabled state of the APIC and ends up overwriting an existing valid entry
    and as a result, APIC calibration hangs in the guest during kdump
    initialization.
    
    Remove the bogus LDR/DFR initialization.
    
    This is not intended to work around the KVM APIC bug. The LDR/DFR
    ininitalization is wrong on its own.
    
    The issue goes back into the pre git history. The fixes tag is the commit
    in the bitkeeper import which introduced bigsmp support in 2003.
    
      git://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git
    
    Fixes: db7b9e9f26b8 ("[PATCH] Clustered APIC setup for >8 CPU systems")
    Suggested-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Bandan Das <bsd@redhat.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lkml.kernel.org/r/20190826101513.5080-2-bsd@redhat.com
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 0b2f36a7f6e02d2519259ead4c475a42b0eb2369
Author: Sebastian Mayr <me@sam.st>
Date:   Sun Jul 28 17:26:17 2019 +0200

    uprobes/x86: Fix detection of 32-bit user mode
    
    commit 9212ec7d8357ea630031e89d0d399c761421c83b upstream.
    
    32-bit processes running on a 64-bit kernel are not always detected
    correctly, causing the process to crash when uretprobes are installed.
    
    The reason for the crash is that in_ia32_syscall() is used to determine the
    process's mode, which only works correctly when called from a syscall.
    
    In the case of uretprobes, however, the function is called from a exception
    and always returns 'false' on a 64-bit kernel. In consequence this leads to
    corruption of the process's return address.
    
    Fix this by using user_64bit_mode() instead of in_ia32_syscall(), which
    is correct in any situation.
    
    [ tglx: Add a comment and the following historical info ]
    
    This should have been detected by the rename which happened in commit
    
      abfb9498ee13 ("x86/entry: Rename is_{ia32,x32}_task() to in_{ia32,x32}_syscall()")
    
    which states in the changelog:
    
        The is_ia32_task()/is_x32_task() function names are a big misnomer: they
        suggests that the compat-ness of a system call is a task property, which
        is not true, the compatness of a system call purely depends on how it
        was invoked through the system call layer.
        .....
    
    and then it went and blindly renamed every call site.
    
    Sadly enough this was already mentioned here:
    
       8faaed1b9f50 ("uprobes/x86: Introduce sizeof_long(), cleanup adjust_ret_addr() and
    arch_uretprobe_hijack_return_addr()")
    
    where the changelog says:
    
        TODO: is_ia32_task() is not what we actually want, TS_COMPAT does
        not necessarily mean 32bit. Fortunately syscall-like insns can't be
        probed so it actually works, but it would be better to rename and
        use is_ia32_frame().
    
    and goes all the way back to:
    
        0326f5a94dde ("uprobes/core: Handle breakpoint and singlestep exceptions")
    
    Oh well. 7+ years until someone actually tried a uretprobe on a 32bit
    process on a 64bit kernel....
    
    Fixes: 0326f5a94dde ("uprobes/core: Handle breakpoint and singlestep exceptions")
    Signed-off-by: Sebastian Mayr <me@sam.st>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Dmitry Safonov <dsafonov@virtuozzo.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Link: https://lkml.kernel.org/r/20190728152617.7308-1-me@sam.st
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 211ac58625c2349302c8c8076b1d15b294f735d1
Author: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Date:   Fri Oct 27 13:25:30 2017 -0700

    ptrace,x86: Make user_64bit_mode() available to 32-bit builds
    
    commit e27c310af5c05cf876d9cad006928076c27f54d4 upstream.
    
    In its current form, user_64bit_mode() can only be used when CONFIG_X86_64
    is selected. This implies that code built with CONFIG_X86_64=n cannot use
    it. If a piece of code needs to be built for both CONFIG_X86_64=y and
    CONFIG_X86_64=n and wants to use this function, it needs to wrap it in
    an #ifdef/#endif; potentially, in multiple places.
    
    This can be easily avoided with a single #ifdef/#endif pair within
    user_64bit_mode() itself.
    
    Suggested-by: Borislav Petkov <bp@suse.de>
    Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Borislav Petkov <bp@suse.de>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: ricardo.neri@intel.com
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
    Cc: Huang Rui <ray.huang@amd.com>
    Cc: Qiaowei Ren <qiaowei.ren@intel.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Jiri Slaby <jslaby@suse.cz>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com>
    Cc: Chris Metcalf <cmetcalf@mellanox.com>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Colin Ian King <colin.king@canonical.com>
    Cc: Chen Yucong <slaoub@gmail.com>
    Cc: Adam Buchbinder <adam.buchbinder@gmail.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Lorenzo Stoakes <lstoakes@gmail.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Thomas Garnier <thgarnie@google.com>
    Link: https://lkml.kernel.org/r/1509135945-13762-4-git-send-email-ricardo.neri-calderon@linux.intel.com
    [bwh: Backported to 3.16 as dependency of "uprobes/x86: Fix detection of
     32-bit user mode":
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e0073a55637280bf2bce71650283380447b50f6e
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sun Aug 25 09:21:44 2019 +0200

    ALSA: seq: Fix potential concurrent access to the deleted pool
    
    commit 75545304eba6a3d282f923b96a466dc25a81e359 upstream.
    
    The input pool of a client might be deleted via the resize ioctl, the
    the access to it should be covered by the proper locks.  Currently the
    only missing place is the call in snd_seq_ioctl_get_client_pool(), and
    this patch papers over it.
    
    Reported-by: syzbot+4a75454b9ca2777f35c7@syzkaller.appspotmail.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 f9a945af384351df9e8fa0cdd678c23701b0290e
Author: Sven Eckelmann <sven@narfation.org>
Date:   Thu Aug 22 08:55:36 2019 +0200

    batman-adv: Only read OGM tvlv_len after buffer len check
    
    commit a15d56a60760aa9dbe26343b9a0ac5228f35d445 upstream.
    
    Multiple batadv_ogm_packet can be stored in an skbuff. The functions
    batadv_iv_ogm_send_to_if()/batadv_iv_ogm_receive() use
    batadv_iv_ogm_aggr_packet() to check if there is another additional
    batadv_ogm_packet in the skb or not before they continue processing the
    packet.
    
    The length for such an OGM is BATADV_OGM_HLEN +
    batadv_ogm_packet->tvlv_len. The check must first check that at least
    BATADV_OGM_HLEN bytes are available before it accesses tvlv_len (which is
    part of the header. Otherwise it might try read outside of the currently
    available skbuff to get the content of tvlv_len.
    
    Fixes: ef26157747d4 ("batman-adv: tvlv - basic infrastructure")
    Reported-by: syzbot+355cab184197dbbfa384@syzkaller.appspotmail.com
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Acked-by: Antonio Quartulli <a@unstable.cc>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    [bwh: Backported to 3.16:
     - Drop kernel-doc change
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e512832689c69cb9c864438b9def3d95f33201c4
Author: Sean Christopherson <sean.j.christopherson@intel.com>
Date:   Thu Aug 22 14:11:22 2019 -0700

    x86/retpoline: Don't clobber RFLAGS during CALL_NOSPEC on i386
    
    commit b63f20a778c88b6a04458ed6ffc69da953d3a109 upstream.
    
    Use 'lea' instead of 'add' when adjusting %rsp in CALL_NOSPEC so as to
    avoid clobbering flags.
    
    KVM's emulator makes indirect calls into a jump table of sorts, where
    the destination of the CALL_NOSPEC is a small blob of code that performs
    fast emulation by executing the target instruction with fixed operands.
    
      adcb_al_dl:
         0x000339f8 <+0>:   adc    %dl,%al
         0x000339fa <+2>:   ret
    
    A major motiviation for doing fast emulation is to leverage the CPU to
    handle consumption and manipulation of arithmetic flags, i.e. RFLAGS is
    both an input and output to the target of CALL_NOSPEC.  Clobbering flags
    results in all sorts of incorrect emulation, e.g. Jcc instructions often
    take the wrong path.  Sans the nops...
    
      asm("push %[flags]; popf; " CALL_NOSPEC " ; pushf; pop %[flags]\n"
         0x0003595a <+58>:  mov    0xc0(%ebx),%eax
         0x00035960 <+64>:  mov    0x60(%ebx),%edx
         0x00035963 <+67>:  mov    0x90(%ebx),%ecx
         0x00035969 <+73>:  push   %edi
         0x0003596a <+74>:  popf
         0x0003596b <+75>:  call   *%esi
         0x000359a0 <+128>: pushf
         0x000359a1 <+129>: pop    %edi
         0x000359a2 <+130>: mov    %eax,0xc0(%ebx)
         0x000359b1 <+145>: mov    %edx,0x60(%ebx)
    
      ctxt->eflags = (ctxt->eflags & ~EFLAGS_MASK) | (flags & EFLAGS_MASK);
         0x000359a8 <+136>: mov    -0x10(%ebp),%eax
         0x000359ab <+139>: and    $0x8d5,%edi
         0x000359b4 <+148>: and    $0xfffff72a,%eax
         0x000359b9 <+153>: or     %eax,%edi
         0x000359bd <+157>: mov    %edi,0x4(%ebx)
    
    For the most part this has gone unnoticed as emulation of guest code
    that can trigger fast emulation is effectively limited to MMIO when
    running on modern hardware, and MMIO is rarely, if ever, accessed by
    instructions that affect or consume flags.
    
    Breakage is almost instantaneous when running with unrestricted guest
    disabled, in which case KVM must emulate all instructions when the guest
    has invalid state, e.g. when the guest is in Big Real Mode during early
    BIOS.
    
    Fixes: 776b043848fd2 ("x86/retpoline: Add initial retpoline support")
    Fixes: 1a29b5b7f347a ("KVM: x86: Make indirect calls in emulator speculation safe")
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20190822211122.27579-1-sean.j.christopherson@intel.com
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e09a653bf2e6cda85a59662dc6b55ddd6b32a4d1
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Fri Aug 23 09:54:09 2019 -0400

    dm table: fix invalid memory accesses with too high sector number
    
    commit 1cfd5d3399e87167b7f9157ef99daa0e959f395d upstream.
    
    If the sector number is too high, dm_table_find_target() should return a
    pointer to a zeroed dm_target structure (the caller should test it with
    dm_target_is_valid).
    
    However, for some table sizes, the code in dm_table_find_target() that
    performs btree lookup will access out of bound memory structures.
    
    Fix this bug by testing the sector number at the beginning of
    dm_table_find_target(). Also, add an "inline" keyword to the function
    dm_table_get_size() because this is a hot path.
    
    Fixes: 512875bd9661 ("dm: table detect io beyond device")
    Reported-by: Zhang Tao <kontais@zoho.com>
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7dfbd320389dbe7c3ff1dec173a52583e15039a2
Author: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
Date:   Mon Aug 19 11:31:21 2019 +0800

    dm space map metadata: fix missing store of apply_bops() return value
    
    commit ae148243d3f0816b37477106c05a2ec7d5f32614 upstream.
    
    In commit 6096d91af0b6 ("dm space map metadata: fix occasional leak
    of a metadata block on resize"), we refactor the commit logic to a new
    function 'apply_bops'.  But when that logic was replaced in out() the
    return value was not stored.  This may lead out() returning a wrong
    value to the caller.
    
    Fixes: 6096d91af0b6 ("dm space map metadata: fix occasional leak of a metadata block on resize")
    Signed-off-by: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 144d82afcdfeb6366a334892a3add3a40a429e5d
Author: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
Date:   Sat Aug 17 13:32:40 2019 +0800

    dm btree: fix order of block initialization in btree_split_beneath
    
    commit e4f9d6013820d1eba1432d51dd1c5795759aa77f upstream.
    
    When btree_split_beneath() splits a node to two new children, it will
    allocate two blocks: left and right.  If right block's allocation
    failed, the left block will be unlocked and marked dirty.  If this
    happened, the left block'ss content is zero, because it wasn't
    initialized with the btree struct before the attempot to allocate the
    right block.  Upon return, when flushing the left block to disk, the
    validator will fail when check this block.  Then a BUG_ON is raised.
    
    Fix this by completely initializing the left block before allocating and
    initializing the right block.
    
    Fixes: 4dcb8b57df359 ("dm btree: fix leak of bufio-backed block in btree_split_beneath error path")
    Signed-off-by: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8c5d8a49ecbfd28c341206cda69900691d68397c
Author: Henk van der Laan <opensource@henkvdlaan.com>
Date:   Fri Aug 16 22:08:47 2019 +0200

    usb-storage: Add new JMS567 revision to unusual_devs
    
    commit 08d676d1685c2a29e4d0e1b0242324e564d4589e upstream.
    
    Revision 0x0117 suffers from an identical issue to earlier revisions,
    therefore it should be added to the quirks list.
    
    Signed-off-by: Henk van der Laan <opensource@henkvdlaan.com>
    Link: https://lore.kernel.org/r/20190816200847.21366-1-opensource@henkvdlaan.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 21214eebcd99e8f22ad406695fb8d0c835b0fbed
Author: Hodaszi, Robert <Robert.Hodaszi@digi.com>
Date:   Fri Jun 14 13:16:01 2019 +0000

    Revert "cfg80211: fix processing world regdomain when non modular"
    
    commit 0d31d4dbf38412f5b8b11b4511d07b840eebe8cb upstream.
    
    This reverts commit 96cce12ff6e0 ("cfg80211: fix processing world
    regdomain when non modular").
    
    Re-triggering a reg_process_hint with the last request on all events,
    can make the regulatory domain fail in case of multiple WiFi modules. On
    slower boards (espacially with mdev), enumeration of the WiFi modules
    can end up in an intersected regulatory domain, and user cannot set it
    with 'iw reg set' anymore.
    
    This is happening, because:
    - 1st module enumerates, queues up a regulatory request
    - request gets processed by __reg_process_hint_driver():
      - checks if previous was set by CORE -> yes
        - checks if regulator domain changed -> yes, from '00' to e.g. 'US'
          -> sends request to the 'crda'
    - 2nd module enumerates, queues up a regulator request (which triggers
      the reg_todo() work)
    - reg_todo() -> reg_process_pending_hints() sees, that the last request
      is not processed yet, so it tries to process it again.
      __reg_process_hint driver() will run again, and:
      - checks if the last request's initiator was the core -> no, it was
        the driver (1st WiFi module)
      - checks, if the previous initiator was the driver -> yes
        - checks if the regulator domain changed -> yes, it was '00' (set by
          core, and crda call did not return yet), and should be changed to 'US'
    
    ------> __reg_process_hint_driver calls an intersect
    
    Besides, the reg_process_hint call with the last request is meaningless
    since the crda call has a timeout work. If that timeout expires, the
    first module's request will lost.
    
    Fixes: 96cce12ff6e0 ("cfg80211: fix processing world regdomain when non modular")
    Signed-off-by: Robert Hodaszi <robert.hodaszi@digi.com>
    Link: https://lore.kernel.org/r/20190614131600.GA13897@a1-hr
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 95a74bcea9d4661bdb7ec689b6f671baa39db821
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Aug 14 02:11:57 2019 -0700

    net/packet: fix race in tpacket_snd()
    
    commit 32d3182cd2cd29b2e7e04df7b0db350fbe11289f upstream.
    
    packet_sendmsg() checks tx_ring.pg_vec to decide
    if it must call tpacket_snd().
    
    Problem is that the check is lockless, meaning another thread
    can issue a concurrent setsockopt(PACKET_TX_RING ) to flip
    tx_ring.pg_vec back to NULL.
    
    Given that tpacket_snd() grabs pg_vec_lock mutex, we can
    perform the check again to solve the race.
    
    syzbot reported :
    
    kasan: CONFIG_KASAN_INLINE enabled
    kasan: GPF could be caused by NULL-ptr deref or user memory access
    general protection fault: 0000 [#1] PREEMPT SMP KASAN
    CPU: 1 PID: 11429 Comm: syz-executor394 Not tainted 5.3.0-rc4+ #101
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    RIP: 0010:packet_lookup_frame+0x8d/0x270 net/packet/af_packet.c:474
    Code: c1 ee 03 f7 73 0c 80 3c 0e 00 0f 85 cb 01 00 00 48 8b 0b 89 c0 4c 8d 24 c1 48 b8 00 00 00 00 00 fc ff df 4c 89 e1 48 c1 e9 03 <80> 3c 01 00 0f 85 94 01 00 00 48 8d 7b 10 4d 8b 3c 24 48 b8 00 00
    RSP: 0018:ffff88809f82f7b8 EFLAGS: 00010246
    RAX: dffffc0000000000 RBX: ffff8880a45c7030 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: 1ffff110148b8e06 RDI: ffff8880a45c703c
    RBP: ffff88809f82f7e8 R08: ffff888087aea200 R09: fffffbfff134ae50
    R10: fffffbfff134ae4f R11: ffffffff89a5727f R12: 0000000000000000
    R13: 0000000000000001 R14: ffff8880a45c6ac0 R15: 0000000000000000
    FS:  00007fa04716f700(0000) GS:ffff8880ae900000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fa04716edb8 CR3: 0000000091eb4000 CR4: 00000000001406e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     packet_current_frame net/packet/af_packet.c:487 [inline]
     tpacket_snd net/packet/af_packet.c:2667 [inline]
     packet_sendmsg+0x590/0x6250 net/packet/af_packet.c:2975
     sock_sendmsg_nosec net/socket.c:637 [inline]
     sock_sendmsg+0xd7/0x130 net/socket.c:657
     ___sys_sendmsg+0x3e2/0x920 net/socket.c:2311
     __sys_sendmmsg+0x1bf/0x4d0 net/socket.c:2413
     __do_sys_sendmmsg net/socket.c:2442 [inline]
     __se_sys_sendmmsg net/socket.c:2439 [inline]
     __x64_sys_sendmmsg+0x9d/0x100 net/socket.c:2439
     do_syscall_64+0xfd/0x6a0 arch/x86/entry/common.c:296
     entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    Fixes: 69e3c75f4d54 ("net: TX_RING and packet mmap")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3a8f54a68c9868ddae64603f2ddee082c1737075
Author: Oliver Neukum <oneukum@suse.com>
Date:   Thu Aug 8 16:21:19 2019 +0200

    usb: cdc-acm: make sure a refcount is taken early enough
    
    commit c52873e5a1ef72f845526d9f6a50704433f9c625 upstream.
    
    destroy() will decrement the refcount on the interface, so that
    it needs to be taken so early that it never undercounts.
    
    Fixes: 7fb57a019f94e ("USB: cdc-acm: Fix potential deadlock (lockdep warning)")
    Reported-and-tested-by: syzbot+1b2449b7b5dc240d107a@syzkaller.appspotmail.com
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Link: https://lore.kernel.org/r/20190808142119.7998-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5dc88c0bd578c05e4b764bdb2606017995ff9724
Author: Tony Lindgren <tony@atomide.com>
Date:   Thu Aug 15 01:26:02 2019 -0700

    USB: serial: option: Add Motorola modem UARTs
    
    commit 6caf0be40a707689e8ff8824fdb96ef77685b1ba upstream.
    
    On Motorola Mapphone devices such as Droid 4 there are five USB ports
    that do not use the same layout as Gobi 1K/2K/etc devices listed in
    qcserial.c. So we should use qcaux.c or option.c as noted by
    Dan Williams <dan.j.williams@intel.com>.
    
    As the Motorola USB serial ports have an interrupt endpoint as shown
    with lsusb -v, we should use option.c instead of qcaux.c as pointed out
    by Johan Hovold <johan@kernel.org>.
    
    The ff/ff/ff interfaces seem to always be UARTs on Motorola devices.
    For the other interfaces, class 0x0a (CDC Data) should not in general
    be added as they are typically part of a multi-interface function as
    noted earlier by Bjørn Mork <bjorn@mork.no>.
    
    However, looking at the Motorola mapphone kernel code, the mdm6600 0x0a
    class is only used for flashing the modem firmware, and there are no
    other interfaces. So I've added that too with more details below as it
    works just fine.
    
    The ttyUSB ports on Droid 4 are:
    
    ttyUSB0 DIAG, CQDM-capable
    ttyUSB1 MUX or NMEA, no response
    ttyUSB2 MUX or NMEA, no response
    ttyUSB3 TCMD
    ttyUSB4 AT-capable
    
    The ttyUSB0 is detected as QCDM capable by ModemManager. I think
    it's only used for debugging with ModemManager --debug for sending
    custom AT commands though. ModemManager already can manage data
    connection using the USB QMI ports that are already handled by the
    qmi_wwan.c driver.
    
    To enable the MUX or NMEA ports, it seems that something needs to be
    done additionally to enable them, maybe via the DIAG or TCMD port.
    It might be just a NVRAM setting somewhere, but I have no idea what
    NVRAM settings may need changing for that.
    
    The TCMD port seems to be a Motorola custom protocol for testing
    the modem and to configure it's NVRAM and seems to work just fine
    based on a quick test with a minimal tcmdrw tool I wrote.
    
    The voice modem AT-capable port seems to provide only partial
    support, and no PM support compared to the TS 27.010 based UART
    wired directly to the modem.
    
    The UARTs added with this change are the same product IDs as the
    Motorola Mapphone Android Linux kernel mdm6600_id_table. I don't
    have any mdm9600 based devices, so I have only tested these on
    mdm6600 based droid 4.
    
    Then for the class 0x0a (CDC Data) mode, the Motorola Mapphone Android
    Linux kernel driver moto_flashqsc.c just seems to change the
    port->bulk_out_size to 8K from the default. And is only used for
    flashing the modem firmware it seems.
    
    I've verified that flashing the modem with signed firmware works just
    fine with the option driver after manually toggling the GPIO pins, so
    I've added droid 4 modem flashing mode to the option driver. I've not
    added the other devices listed in moto_flashqsc.c in case they really
    need different port->bulk_out_size. Those can be added as they get
    tested to work for flashing the modem.
    
    After this patch the output of /sys/kernel/debug/usb/devices has
    the following for normal 22b8:2a70 mode including the related qmi_wwan
    interfaces:
    
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12   MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=22b8 ProdID=2a70 Rev= 0.00
    S:  Manufacturer=Motorola, Incorporated
    S:  Product=Flash MZ600
    C:* #Ifs= 9 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E:  Ad=83(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E:  Ad=84(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=04(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E:  Ad=85(I) Atr=03(Int.) MxPS=  64 Ivl=5ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=05(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=fb Prot=ff Driver=qmi_wwan
    E:  Ad=87(I) Atr=03(Int.) MxPS=  64 Ivl=5ms
    E:  Ad=88(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=06(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 6 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=fb Prot=ff Driver=qmi_wwan
    E:  Ad=89(I) Atr=03(Int.) MxPS=  64 Ivl=5ms
    E:  Ad=8a(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=07(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 7 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=fb Prot=ff Driver=qmi_wwan
    E:  Ad=8b(I) Atr=03(Int.) MxPS=  64 Ivl=5ms
    E:  Ad=8c(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=08(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 8 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=fb Prot=ff Driver=qmi_wwan
    E:  Ad=8d(I) Atr=03(Int.) MxPS=  64 Ivl=5ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=09(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    
    In 22b8:900e "qc_dload" mode the device shows up as:
    
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12   MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=22b8 ProdID=900e Rev= 0.00
    S:  Manufacturer=Motorola, Incorporated
    S:  Product=Flash MZ600
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    
    And in 22b8:4281 "ram_downloader" mode the device shows up as:
    
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12   MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=22b8 ProdID=4281 Rev= 0.00
    S:  Manufacturer=Motorola, Incorporated
    S:  Product=Flash MZ600
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=fc Driver=option
    E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    
    Cc: Bjørn Mork <bjorn@mork.no>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Lars Melin <larsm17@gmail.com>
    Cc: Marcel Partap <mpartap@gmx.net>
    Cc: Merlijn Wajer <merlijn@wizzup.org>
    Cc: Michael Scott <hashcode0f@gmail.com>
    Cc: NeKit <nekit1000@gmail.com>
    Cc: Pavel Machek <pavel@ucw.cz>
    Cc: Sebastian Reichel <sre@kernel.org>
    Tested-by: Pavel Machek <pavel@ucw.cz>
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 3ab07450c0bac1069d7324dc95c361e3244e11f2
Author: Xin Long <lucien.xin@gmail.com>
Date:   Mon Aug 12 20:49:12 2019 +0800

    sctp: fix the transport error_count check
    
    commit a1794de8b92ea6bc2037f445b296814ac826693e upstream.
    
    As the annotation says in sctp_do_8_2_transport_strike():
    
      "If the transport error count is greater than the pf_retrans
       threshold, and less than pathmaxrtx ..."
    
    It should be transport->error_count checked with pathmaxrxt,
    instead of asoc->pf_retrans.
    
    Fixes: 5aa93bcf66f4 ("sctp: Implement quick failover draft from tsvwg")
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.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 bb0c85d99466548dc213fe18c3c040fb2ed118aa
Author: Dirk Morris <dmorris@metaloft.com>
Date:   Thu Aug 8 13:57:51 2019 -0700

    netfilter: conntrack: Use consistent ct id hash calculation
    
    commit 656c8e9cc1badbc18eefe6ba01d33ebbcae61b9a upstream.
    
    Change ct id hash calculation to only use invariants.
    
    Currently the ct id hash calculation is based on some fields that can
    change in the lifetime on a conntrack entry in some corner cases. The
    current hash uses the whole tuple which contains an hlist pointer which
    will change when the conntrack is placed on the dying list resulting in
    a ct id change.
    
    This patch also removes the reply-side tuple and extension pointer from
    the hash calculation so that the ct id will will not change from
    initialization until confirmation.
    
    Fixes: 3c79107631db1f7 ("netfilter: ctnetlink: don't use conntrack/expect object addresses as id")
    Signed-off-by: Dirk Morris <dmorris@metaloft.com>
    Acked-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 7e0af4e53ee2cf9b5e4ee761bd8dc4f25a9c885a
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Mon Aug 12 16:11:07 2019 -0400

    USB: core: Fix races in character device registration and deregistraion
    
    commit 303911cfc5b95d33687d9046133ff184cf5043ff upstream.
    
    The syzbot fuzzer has found two (!) races in the USB character device
    registration and deregistration routines.  This patch fixes the races.
    
    The first race results from the fact that usb_deregister_dev() sets
    usb_minors[intf->minor] to NULL before calling device_destroy() on the
    class device.  This leaves a window during which another thread can
    allocate the same minor number but will encounter a duplicate name
    error when it tries to register its own class device.  A typical error
    message in the system log would look like:
    
        sysfs: cannot create duplicate filename '/class/usbmisc/ldusb0'
    
    The patch fixes this race by destroying the class device first.
    
    The second race is in usb_register_dev().  When that routine runs, it
    first allocates a minor number, then drops minor_rwsem, and then
    creates the class device.  If the device creation fails, the minor
    number is deallocated and the whole routine returns an error.  But
    during the time while minor_rwsem was dropped, there is a window in
    which the minor number is allocated and so another thread can
    successfully open the device file.  Typically this results in
    use-after-free errors or invalid accesses when the other thread closes
    its open file reference, because the kernel then tries to release
    resources that were already deallocated when usb_register_dev()
    failed.  The patch fixes this race by keeping minor_rwsem locked
    throughout the entire routine.
    
    Reported-and-tested-by: syzbot+30cf45ebfe0b0c4847a1@syzkaller.appspotmail.com
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/Pine.LNX.4.44L0.1908121607590.1659-100000@iolanthe.rowland.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 098d1e58387ef692a2834692450416a56e8448c2
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Mon Aug 12 13:08:14 2019 +0100

    staging: comedi: dt3000: Fix rounding up of timer divisor
    
    commit 8e2a589a3fc36ce858d42e767c3bcd8fc62a512b upstream.
    
    `dt3k_ns_to_timer()` determines the prescaler and divisor to use to
    produce a desired timing period.  It is influenced by a rounding mode
    and can round the divisor up, down, or to the nearest value.  However,
    the code for rounding up currently does the same as rounding down!  Fix
    ir by using the `DIV_ROUND_UP()` macro to calculate the divisor when
    rounding up.
    
    Also, change the types of the `divider`, `base` and `prescale` variables
    from `int` to `unsigned int` to avoid mixing signed and unsigned types
    in the calculations.
    
    Also fix a typo in a nearby comment: "improvment" => "improvement".
    
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://lore.kernel.org/r/20190812120814.21188-1-abbotti@mev.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 46c7e43a7cd417f8971e4f386e1a94eb1930206e
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Mon Aug 12 12:15:17 2019 +0100

    staging: comedi: dt3000: Fix signed integer overflow 'divider * base'
    
    commit b4d98bc3fc93ec3a58459948a2c0e0c9b501cd88 upstream.
    
    In `dt3k_ns_to_timer()` the following lines near the end of the function
    result in a signed integer overflow:
    
            prescale = 15;
            base = timer_base * (1 << prescale);
            divider = 65535;
            *nanosec = divider * base;
    
    (`divider`, `base` and `prescale` are type `int`, `timer_base` and
    `*nanosec` are type `unsigned int`.  The value of `timer_base` will be
    either 50 or 100.)
    
    The main reason for the overflow is that the calculation for `base` is
    completely wrong.  It should be:
    
            base = timer_base * (prescale + 1);
    
    which matches an earlier instance of this calculation in the same
    function.
    
    Reported-by: David Binderman <dcb314@hotmail.com>
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://lore.kernel.org/r/20190812111517.26803-1-abbotti@mev.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 69c40c57c77cdbb91c348e16b6bf4ca42c31171e
Author: Nathan Chancellor <natechancellor@gmail.com>
Date:   Sun Aug 11 20:13:45 2019 -0700

    net: tc35815: Explicitly check NET_IP_ALIGN is not zero in tc35815_rx
    
    commit 125b7e0949d4e72b15c2b1a1590f8cece985a918 upstream.
    
    clang warns:
    
    drivers/net/ethernet/toshiba/tc35815.c:1507:30: warning: use of logical
    '&&' with constant operand [-Wconstant-logical-operand]
                            if (!HAVE_DMA_RXALIGN(lp) && NET_IP_ALIGN)
                                                      ^  ~~~~~~~~~~~~
    drivers/net/ethernet/toshiba/tc35815.c:1507:30: note: use '&' for a
    bitwise operation
                            if (!HAVE_DMA_RXALIGN(lp) && NET_IP_ALIGN)
                                                      ^~
                                                      &
    drivers/net/ethernet/toshiba/tc35815.c:1507:30: note: remove constant to
    silence this warning
                            if (!HAVE_DMA_RXALIGN(lp) && NET_IP_ALIGN)
                                                     ~^~~~~~~~~~~~~~~
    1 warning generated.
    
    Explicitly check that NET_IP_ALIGN is not zero, which matches how this
    is checked in other parts of the tree. Because NET_IP_ALIGN is a build
    time constant, this check will be constant folded away during
    optimization.
    
    Fixes: 82a9928db560 ("tc35815: Enable StripCRC feature")
    Link: https://github.com/ClangBuiltLinux/linux/issues/608
    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7c523ff0e19a324c54c286e55c42b734f0dcd8bc
Author: Gustavo A. R. Silva <gustavo@embeddedor.com>
Date:   Fri Aug 9 23:43:56 2019 -0500

    sh: kernel: hw_breakpoint: Fix missing break in switch statement
    
    commit 1ee1119d184bb06af921b48c3021d921bbd85bac upstream.
    
    Add missing break statement in order to prevent the code from falling
    through to case SH_BREAKPOINT_WRITE.
    
    Fixes: 09a072947791 ("sh: hw-breakpoints: Add preliminary support for SH-4A UBC.")
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit d0be8493e3cf2645ae9d50be655f97d646bc9b7e
Author: Wenwen Wang <wenwen@cs.uga.edu>
Date:   Fri Aug 9 23:29:48 2019 -0500

    ALSA: hda - Fix a memory leak bug
    
    commit cfef67f016e4c00a2f423256fc678a6967a9fc09 upstream.
    
    In snd_hda_parse_generic_codec(), 'spec' is allocated through kzalloc().
    Then, the pin widgets in 'codec' are parsed. However, if the parsing
    process fails, 'spec' is not deallocated, leading to a memory leak.
    
    To fix the above issue, free 'spec' before returning the error.
    
    Fixes: 352f7f914ebb ("ALSA: hda - Merge Realtek parser code to generic parser")
    Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 2654ab2efb3bcb77ccc50061e2bf7ff042d28383
Author: Wenwen Wang <wenwen@cs.uga.edu>
Date:   Thu Aug 8 00:50:58 2019 -0500

    ALSA: firewire: fix a memory leak bug
    
    commit 1be3c1fae6c1e1f5bb982b255d2034034454527a upstream.
    
    In iso_packets_buffer_init(), 'b->packets' is allocated through
    kmalloc_array(). Then, the aligned packet size is checked. If it is
    larger than PAGE_SIZE, -EINVAL will be returned to indicate the error.
    However, the allocated 'b->packets' is not deallocated on this path,
    leading to a memory leak.
    
    To fix the above issue, free 'b->packets' before returning the error code.
    
    Fixes: 31ef9134eb52 ("ALSA: add LaCie FireWire Speakers/Griffin FireWave Surround driver")
    Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu>
    Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit a81c4add9f2966cb2b17406cd62e58a435a95b57
Author: Wenwen Wang <wenwen@cs.uga.edu>
Date:   Thu Aug 8 00:15:21 2019 -0500

    sound: fix a memory leak bug
    
    commit c7cd7c748a3250ca33509f9235efab9c803aca09 upstream.
    
    In sound_insert_unit(), the controlling structure 's' is allocated through
    kmalloc(). Then it is added to the sound driver list by invoking
    __sound_insert_unit(). Later on, if __register_chrdev() fails, 's' is
    removed from the list through __sound_remove_unit(). If 'index' is not less
    than 0, -EBUSY is returned to indicate the error. However, 's' is not
    deallocated on this execution path, leading to a memory leak bug.
    
    To fix the above issue, free 's' before -EBUSY is returned.
    
    Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8e4e88ef41fe4246e731182bb493236b025e30e3
Author: Steve French <stfrench@microsoft.com>
Date:   Thu Jul 25 18:13:10 2019 -0500

    smb3: send CAP_DFS capability during session setup
    
    commit 8d33096a460d5b9bd13300f01615df5bb454db10 upstream.
    
    We had a report of a server which did not do a DFS referral
    because the session setup Capabilities field was set to 0
    (unlike negotiate protocol where we set CAP_DFS).  Better to
    send it session setup in the capabilities as well (this also
    more closely matches Windows client behavior).
    
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Reviewed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
    Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit bd5be7a662e9c91c8a8765da9e6a43f45c0a2b02
Author: Pavel Shilovsky <pshilov@microsoft.com>
Date:   Mon Jul 22 11:34:59 2019 -0700

    SMB3: Fix deadlock in validate negotiate hits reconnect
    
    commit e99c63e4d86d3a94818693147b469fa70de6f945 upstream.
    
    Currently we skip SMB2_TREE_CONNECT command when checking during
    reconnect because Tree Connect happens when establishing
    an SMB session. For SMB 3.0 protocol version the code also calls
    validate negotiate which results in SMB2_IOCL command being sent
    over the wire. This may deadlock on trying to acquire a mutex when
    checking for reconnect. Fix this by skipping SMB2_IOCL command
    when doing the reconnect check.
    
    Signed-off-by: Pavel Shilovsky <pshilov@microsoft.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8f6204f2adba5354b65bd0f37b8d930e49df6420
Author: Suzuki K Poulose <suzuki.poulose@arm.com>
Date:   Mon Aug 5 12:15:28 2019 +0100

    usb: yurex: Fix use-after-free in yurex_delete
    
    commit fc05481b2fcabaaeccf63e32ac1baab54e5b6963 upstream.
    
    syzbot reported the following crash [0]:
    
    BUG: KASAN: use-after-free in usb_free_coherent+0x79/0x80
    drivers/usb/core/usb.c:928
    Read of size 8 at addr ffff8881b18599c8 by task syz-executor.4/16007
    
    CPU: 0 PID: 16007 Comm: syz-executor.4 Not tainted 5.3.0-rc2+ #23
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
    Google 01/01/2011
    Call Trace:
      __dump_stack lib/dump_stack.c:77 [inline]
      dump_stack+0xca/0x13e lib/dump_stack.c:113
      print_address_description+0x6a/0x32c mm/kasan/report.c:351
      __kasan_report.cold+0x1a/0x33 mm/kasan/report.c:482
      kasan_report+0xe/0x12 mm/kasan/common.c:612
      usb_free_coherent+0x79/0x80 drivers/usb/core/usb.c:928
      yurex_delete+0x138/0x330 drivers/usb/misc/yurex.c:100
      kref_put include/linux/kref.h:65 [inline]
      yurex_release+0x66/0x90 drivers/usb/misc/yurex.c:392
      __fput+0x2d7/0x840 fs/file_table.c:280
      task_work_run+0x13f/0x1c0 kernel/task_work.c:113
      tracehook_notify_resume include/linux/tracehook.h:188 [inline]
      exit_to_usermode_loop+0x1d2/0x200 arch/x86/entry/common.c:163
      prepare_exit_to_usermode arch/x86/entry/common.c:194 [inline]
      syscall_return_slowpath arch/x86/entry/common.c:274 [inline]
      do_syscall_64+0x45f/0x580 arch/x86/entry/common.c:299
      entry_SYSCALL_64_after_hwframe+0x49/0xbe
    RIP: 0033:0x413511
    Code: 75 14 b8 03 00 00 00 0f 05 48 3d 01 f0 ff ff 0f 83 04 1b 00 00 c3 48
    83 ec 08 e8 0a fc ff ff 48 89 04 24 b8 03 00 00 00 0f 05 <48> 8b 3c 24 48
    89 c2 e8 53 fc ff ff 48 89 d0 48 83 c4 08 48 3d 01
    RSP: 002b:00007ffc424ea2e0 EFLAGS: 00000293 ORIG_RAX: 0000000000000003
    RAX: 0000000000000000 RBX: 0000000000000007 RCX: 0000000000413511
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000006
    RBP: 0000000000000001 R08: 0000000029a2fc22 R09: 0000000029a2fc26
    R10: 00007ffc424ea3c0 R11: 0000000000000293 R12: 000000000075c9a0
    R13: 000000000075c9a0 R14: 0000000000761938 R15: ffffffffffffffff
    
    Allocated by task 2776:
      save_stack+0x1b/0x80 mm/kasan/common.c:69
      set_track mm/kasan/common.c:77 [inline]
      __kasan_kmalloc mm/kasan/common.c:487 [inline]
      __kasan_kmalloc.constprop.0+0xbf/0xd0 mm/kasan/common.c:460
      kmalloc include/linux/slab.h:552 [inline]
      kzalloc include/linux/slab.h:748 [inline]
      usb_alloc_dev+0x51/0xf95 drivers/usb/core/usb.c:583
      hub_port_connect drivers/usb/core/hub.c:5004 [inline]
      hub_port_connect_change drivers/usb/core/hub.c:5213 [inline]
      port_event drivers/usb/core/hub.c:5359 [inline]
      hub_event+0x15c0/0x3640 drivers/usb/core/hub.c:5441
      process_one_work+0x92b/0x1530 kernel/workqueue.c:2269
      worker_thread+0x96/0xe20 kernel/workqueue.c:2415
      kthread+0x318/0x420 kernel/kthread.c:255
      ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352
    
    Freed by task 16007:
      save_stack+0x1b/0x80 mm/kasan/common.c:69
      set_track mm/kasan/common.c:77 [inline]
      __kasan_slab_free+0x130/0x180 mm/kasan/common.c:449
      slab_free_hook mm/slub.c:1423 [inline]
      slab_free_freelist_hook mm/slub.c:1470 [inline]
      slab_free mm/slub.c:3012 [inline]
      kfree+0xe4/0x2f0 mm/slub.c:3953
      device_release+0x71/0x200 drivers/base/core.c:1064
      kobject_cleanup lib/kobject.c:693 [inline]
      kobject_release lib/kobject.c:722 [inline]
      kref_put include/linux/kref.h:65 [inline]
      kobject_put+0x171/0x280 lib/kobject.c:739
      put_device+0x1b/0x30 drivers/base/core.c:2213
      usb_put_dev+0x1f/0x30 drivers/usb/core/usb.c:725
      yurex_delete+0x40/0x330 drivers/usb/misc/yurex.c:95
      kref_put include/linux/kref.h:65 [inline]
      yurex_release+0x66/0x90 drivers/usb/misc/yurex.c:392
      __fput+0x2d7/0x840 fs/file_table.c:280
      task_work_run+0x13f/0x1c0 kernel/task_work.c:113
      tracehook_notify_resume include/linux/tracehook.h:188 [inline]
      exit_to_usermode_loop+0x1d2/0x200 arch/x86/entry/common.c:163
      prepare_exit_to_usermode arch/x86/entry/common.c:194 [inline]
      syscall_return_slowpath arch/x86/entry/common.c:274 [inline]
      do_syscall_64+0x45f/0x580 arch/x86/entry/common.c:299
      entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    The buggy address belongs to the object at ffff8881b1859980
      which belongs to the cache kmalloc-2k of size 2048
    The buggy address is located 72 bytes inside of
      2048-byte region [ffff8881b1859980, ffff8881b185a180)
    The buggy address belongs to the page:
    page:ffffea0006c61600 refcount:1 mapcount:0 mapping:ffff8881da00c000
    index:0x0 compound_mapcount: 0
    flags: 0x200000000010200(slab|head)
    raw: 0200000000010200 0000000000000000 0000000100000001 ffff8881da00c000
    raw: 0000000000000000 00000000000f000f 00000001ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
      ffff8881b1859880: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      ffff8881b1859900: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    > ffff8881b1859980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                                   ^
      ffff8881b1859a00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ffff8881b1859a80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    ==================================================================
    
    A quick look at the yurex_delete() shows that we drop the reference
    to the usb_device before releasing any buffers associated with the
    device. Delay the reference drop until we have finished the cleanup.
    
    [0] https://lore.kernel.org/lkml/0000000000003f86d8058f0bd671@google.com/
    
    Fixes: 6bc235a2e24a5e ("USB: add driver for Meywa-Denki & Kayac YUREX")
    Cc: Jiri Kosina <jkosina@suse.cz>
    Cc: Tomoki Sekiyama <tomoki.sekiyama@gmail.com>
    Cc: Oliver Neukum <oneukum@suse.com>
    Cc: andreyknvl@google.com
    Cc: gregkh@linuxfoundation.org
    Cc: Alan Stern <stern@rowland.harvard.edu>
    Cc: syzkaller-bugs@googlegroups.com
    Cc: dtor@chromium.org
    Reported-by: syzbot+d1fedb1c1fdb07fca507@syzkaller.appspotmail.com
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Link: https://lore.kernel.org/r/20190805111528.6758-1-suzuki.poulose@arm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5142d6ba31c70e906a5087b1a3811d96056ea289
Author: Yoshiaki Okamoto <yokamoto@allied-telesis.co.jp>
Date:   Sat Jul 20 22:23:18 2019 +0900

    USB: serial: option: Add support for ZTE MF871A
    
    commit 7e7ae38bf928c5cfa6dd6e9a2cf8b42c84a27c92 upstream.
    
    This patch adds support for MF871A USB modem (aka Speed USB STICK U03)
    to option driver. This modem is manufactured by ZTE corporation, and
    sold by KDDI.
    
    Interface layout:
    0: AT
    1: MODEM
    
    usb-devices output:
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  9 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=19d2 ProdID=1481 Rev=52.87
    S:  Manufacturer=ZTE,Incorporated
    S:  Product=ZTE Technologies MSM
    S:  SerialNumber=1234567890ABCDEF
    C:  #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    
    Co-developed-by: Hiroyuki Yamamoto <hyamamo@allied-telesis.co.jp>
    Signed-off-by: Hiroyuki Yamamoto <hyamamo@allied-telesis.co.jp>
    Signed-off-by: Yoshiaki Okamoto <yokamoto@allied-telesis.co.jp>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit ac292874f744e6ee1fa384cdf0cb3ce57b832e97
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Sat Aug 3 10:11:27 2019 -0400

    NFSv4: Fix a potential sleep while atomic in nfs4_do_reclaim()
    
    commit c77e22834ae9a11891cb613bd9a551be1b94f2bc upstream.
    
    John Hubbard reports seeing the following stack trace:
    
    nfs4_do_reclaim
       rcu_read_lock /* we are now in_atomic() and must not sleep */
           nfs4_purge_state_owners
               nfs4_free_state_owner
                   nfs4_destroy_seqid_counter
                       rpc_destroy_wait_queue
                           cancel_delayed_work_sync
                               __cancel_work_timer
                                   __flush_work
                                       start_flush_work
                                           might_sleep:
                                            (kernel/workqueue.c:2975: BUG)
    
    The solution is to separate out the freeing of the state owners
    from nfs4_purge_state_owners(), and perform that outside the atomic
    context.
    
    Reported-by: John Hubbard <jhubbard@nvidia.com>
    Fixes: 0aaaf5c424c7f ("NFS: Cache state owners after files are closed")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 7dc86f604500eb0a09c562c2f87f28bc9850bd45
Author: Qian Cai <cai@lca.pw>
Date:   Fri Aug 2 21:49:19 2019 -0700

    asm-generic: fix -Wtype-limits compiler warnings
    
    commit cbedfe11347fe418621bd188d58a206beb676218 upstream.
    
    Commit d66acc39c7ce ("bitops: Optimise get_order()") introduced a
    compilation warning because "rx_frag_size" is an "ushort" while
    PAGE_SHIFT here is 16.
    
    The commit changed the get_order() to be a multi-line macro where
    compilers insist to check all statements in the macro even when
    __builtin_constant_p(rx_frag_size) will return false as "rx_frag_size"
    is a module parameter.
    
    In file included from ./arch/powerpc/include/asm/page_64.h:107,
                     from ./arch/powerpc/include/asm/page.h:242,
                     from ./arch/powerpc/include/asm/mmu.h:132,
                     from ./arch/powerpc/include/asm/lppaca.h:47,
                     from ./arch/powerpc/include/asm/paca.h:17,
                     from ./arch/powerpc/include/asm/current.h:13,
                     from ./include/linux/thread_info.h:21,
                     from ./arch/powerpc/include/asm/processor.h:39,
                     from ./include/linux/prefetch.h:15,
                     from drivers/net/ethernet/emulex/benet/be_main.c:14:
    drivers/net/ethernet/emulex/benet/be_main.c: In function 'be_rx_cqs_create':
    ./include/asm-generic/getorder.h:54:9: warning: comparison is always
    true due to limited range of data type [-Wtype-limits]
       (((n) < (1UL << PAGE_SHIFT)) ? 0 :  \
             ^
    drivers/net/ethernet/emulex/benet/be_main.c:3138:33: note: in expansion
    of macro 'get_order'
      adapter->big_page_size = (1 << get_order(rx_frag_size)) * PAGE_SIZE;
                                     ^~~~~~~~~
    
    Fix it by moving all of this multi-line macro into a proper function,
    and killing __get_order() off.
    
    [akpm@linux-foundation.org: remove __get_order() altogether]
    [cai@lca.pw: v2]
      Link: http://lkml.kernel.org/r/1564000166-31428-1-git-send-email-cai@lca.pw
    Link: http://lkml.kernel.org/r/1563914986-26502-1-git-send-email-cai@lca.pw
    Fixes: d66acc39c7ce ("bitops: Optimise get_order()")
    Signed-off-by: Qian Cai <cai@lca.pw>
    Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Jakub Jelinek <jakub@redhat.com>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: Bill Wendling <morbo@google.com>
    Cc: James Y Knight <jyknight@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 06d7546f7b115a266a9bb81887479f38e166964e
Author: Tomas Bortoli <tomasbortoli@gmail.com>
Date:   Wed Jul 31 10:54:47 2019 -0400

    can: peak_usb: pcan_usb_pro: Fix info-leaks to USB devices
    
    commit ead16e53c2f0ed946d82d4037c630e2f60f4ab69 upstream.
    
    Uninitialized Kernel memory can leak to USB devices.
    
    Fix by using kzalloc() instead of kmalloc() on the affected buffers.
    
    Signed-off-by: Tomas Bortoli <tomasbortoli@gmail.com>
    Reported-by: syzbot+d6a5a1a3657b596ef132@syzkaller.appspotmail.com
    Fixes: f14e22435a27 ("net: can: peak_usb: Do not do dma on the stack")
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 84cdb51028da491ea02e09e0cc9ea18c9e662500
Author: Stefan Haberland <sth@linux.ibm.com>
Date:   Thu Aug 1 13:06:30 2019 +0200

    s390/dasd: fix endless loop after read unit address configuration
    
    commit 41995342b40c418a47603e1321256d2c4a2ed0fb upstream.
    
    After getting a storage server event that causes the DASD device driver
    to update its unit address configuration during a device shutdown there is
    the possibility of an endless loop in the device driver.
    
    In the system log there will be ongoing DASD error messages with RC: -19.
    
    The reason is that the loop starting the ruac request only terminates when
    the retry counter is decreased to 0. But in the sleep_on function there are
    early exit paths that do not decrease the retry counter.
    
    Prevent an endless loop by handling those cases separately.
    
    Remove the unnecessary do..while loop since the sleep_on function takes
    care of retries by itself.
    
    Fixes: 8e09f21574ea ("[S390] dasd: add hyper PAV support to DASD device driver, part 1")
    Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
    Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 56e2bbd69c3fb73ae3bfb2de71e792b460e71d58
Author: Juergen Gross <jgross@suse.com>
Date:   Fri Jun 14 07:46:02 2019 +0200

    xen/swiotlb: fix condition for calling xen_destroy_contiguous_region()
    
    commit 50f6393f9654c561df4cdcf8e6cfba7260143601 upstream.
    
    The condition in xen_swiotlb_free_coherent() for deciding whether to
    call xen_destroy_contiguous_region() is wrong: in case the region to
    be freed is not contiguous calling xen_destroy_contiguous_region() is
    the wrong thing to do: it would result in inconsistent mappings of
    multiple PFNs to the same MFN. This will lead to various strange
    crashes or data corruption.
    
    Instead of calling xen_destroy_contiguous_region() in that case a
    warning should be issued as that situation should never occur.
    
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>
    Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 43bc06c591a7fea50518d2638debd513c7204248
Author: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Date:   Tue Jul 30 14:21:00 2019 +0300

    net: bridge: mcast: don't delete permanent entries when fast leave is enabled
    
    commit 5c725b6b65067909548ac9ca9bc777098ec9883d upstream.
    
    When permanent entries were introduced by the commit below, they were
    exempt from timing out and thus igmp leave wouldn't affect them unless
    fast leave was enabled on the port which was added before permanent
    entries existed. It shouldn't matter if fast leave is enabled or not
    if the user added a permanent entry it shouldn't be deleted on igmp
    leave.
    
    Before:
    $ echo 1 > /sys/class/net/eth4/brport/multicast_fast_leave
    $ bridge mdb add dev br0 port eth4 grp 229.1.1.1 permanent
    $ bridge mdb show
    dev br0 port eth4 grp 229.1.1.1 permanent
    
    < join and leave 229.1.1.1 on eth4 >
    
    $ bridge mdb show
    $
    
    After:
    $ echo 1 > /sys/class/net/eth4/brport/multicast_fast_leave
    $ bridge mdb add dev br0 port eth4 grp 229.1.1.1 permanent
    $ bridge mdb show
    dev br0 port eth4 grp 229.1.1.1 permanent
    
    < join and leave 229.1.1.1 on eth4 >
    
    $ bridge mdb show
    dev br0 port eth4 grp 229.1.1.1 permanent
    
    Fixes: ccb1c31a7a87 ("bridge: add flags to distinguish permanent mdb entires")
    Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    [bwh: Backported to 3.16: Check PERMANENT flag in net_bridge_port_group::state,
     not net_bridge_port_group::flags.]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 5e63515dadcf852203e6e71af670fb22249187ea
Author: Ondrej Mosnacek <omosnace@redhat.com>
Date:   Thu Jul 25 12:52:43 2019 +0200

    selinux: fix memory leak in policydb_init()
    
    commit 45385237f65aeee73641f1ef737d7273905a233f upstream.
    
    Since roles_init() adds some entries to the role hash table, we need to
    destroy also its keys/values on error, otherwise we get a memory leak in
    the error path.
    
    Reported-by: syzbot+fee3a14d4cdf92646287@syzkaller.appspotmail.com
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 197d401859ad7a420e371d2e18c103d7994fad19
Author: Kees Cook <keescook@chromium.org>
Date:   Mon Jul 29 14:47:22 2019 -0700

    libata: zpodd: Fix small read overflow in zpodd_get_mech_type()
    
    commit 71d6c505b4d9e6f76586350450e785e3d452b346 upstream.
    
    Jeffrin reported a KASAN issue:
    
      BUG: KASAN: global-out-of-bounds in ata_exec_internal_sg+0x50f/0xc70
      Read of size 16 at addr ffffffff91f41f80 by task scsi_eh_1/149
      ...
      The buggy address belongs to the variable:
        cdb.48319+0x0/0x40
    
    Much like commit 18c9a99bce2a ("libata: zpodd: small read overflow in
    eject_tray()"), this fixes a cdb[] buffer length, this time in
    zpodd_get_mech_type():
    
    We read from the cdb[] buffer in ata_exec_internal_sg(). It has to be
    ATAPI_CDB_LEN (16) bytes long, but this buffer is only 12 bytes.
    
    Reported-by: Jeffrin Jose T <jeffrin@rajagiritech.edu.in>
    Fixes: afe759511808c ("libata: identify and init ZPODD devices")
    Link: https://lore.kernel.org/lkml/201907181423.E808958@keescook/
    Tested-by: Jeffrin Jose T <jeffrin@rajagiritech.edu.in>
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 72a89066640b9b5b34d68a2e7cb199209dba7e95
Author: Jiri Pirko <jiri@mellanox.com>
Date:   Sun Jul 28 14:56:36 2019 +0200

    net: fix ifindex collision during namespace removal
    
    commit 55b40dbf0e76b4bfb9d8b3a16a0208640a9a45df upstream.
    
    Commit aca51397d014 ("netns: Fix arbitrary net_device-s corruptions
    on net_ns stop.") introduced a possibility to hit a BUG in case device
    is returning back to init_net and two following conditions are met:
    1) dev->ifindex value is used in a name of another "dev%d"
       device in init_net.
    2) dev->name is used by another device in init_net.
    
    Under real life circumstances this is hard to get. Therefore this has
    been present happily for over 10 years. To reproduce:
    
    $ ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 86:89:3f:86:61:29 brd ff:ff:ff:ff:ff:ff
    3: enp0s2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    $ ip netns add ns1
    $ ip -n ns1 link add dummy1ns1 type dummy
    $ ip -n ns1 link add dummy2ns1 type dummy
    $ ip link set enp0s2 netns ns1
    $ ip -n ns1 link set enp0s2 name dummy0
    [  100.858894] virtio_net virtio0 dummy0: renamed from enp0s2
    $ ip link add dev4 type dummy
    $ ip -n ns1 a
    1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: dummy1ns1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 16:63:4c:38:3e:ff brd ff:ff:ff:ff:ff:ff
    3: dummy2ns1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether aa:9e:86:dd:6b:5d brd ff:ff:ff:ff:ff:ff
    4: dummy0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    $ ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 86:89:3f:86:61:29 brd ff:ff:ff:ff:ff:ff
    4: dev4: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 5a:e1:4a:b6:ec:f8 brd ff:ff:ff:ff:ff:ff
    $ ip netns del ns1
    [  158.717795] default_device_exit: failed to move dummy0 to init_net: -17
    [  158.719316] ------------[ cut here ]------------
    [  158.720591] kernel BUG at net/core/dev.c:9824!
    [  158.722260] invalid opcode: 0000 [#1] SMP KASAN PTI
    [  158.723728] CPU: 0 PID: 56 Comm: kworker/u2:1 Not tainted 5.3.0-rc1+ #18
    [  158.725422] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-2.fc30 04/01/2014
    [  158.727508] Workqueue: netns cleanup_net
    [  158.728915] RIP: 0010:default_device_exit.cold+0x1d/0x1f
    [  158.730683] Code: 84 e8 18 c9 3e fe 0f 0b e9 70 90 ff ff e8 36 e4 52 fe 89 d9 4c 89 e2 48 c7 c6 80 d6 25 84 48 c7 c7 20 c0 25 84 e8 f4 c8 3e
    [  158.736854] RSP: 0018:ffff8880347e7b90 EFLAGS: 00010282
    [  158.738752] RAX: 000000000000003b RBX: 00000000ffffffef RCX: 0000000000000000
    [  158.741369] RDX: 0000000000000000 RSI: ffffffff8128013d RDI: ffffed10068fcf64
    [  158.743418] RBP: ffff888033550170 R08: 000000000000003b R09: fffffbfff0b94b9c
    [  158.745626] R10: fffffbfff0b94b9b R11: ffffffff85ca5cdf R12: ffff888032f28000
    [  158.748405] R13: dffffc0000000000 R14: ffff8880335501b8 R15: 1ffff110068fcf72
    [  158.750638] FS:  0000000000000000(0000) GS:ffff888036000000(0000) knlGS:0000000000000000
    [  158.752944] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  158.755245] CR2: 00007fe8b45d21d0 CR3: 00000000340b4005 CR4: 0000000000360ef0
    [  158.757654] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [  158.760012] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [  158.762758] Call Trace:
    [  158.763882]  ? dev_change_net_namespace+0xbb0/0xbb0
    [  158.766148]  ? devlink_nl_cmd_set_doit+0x520/0x520
    [  158.768034]  ? dev_change_net_namespace+0xbb0/0xbb0
    [  158.769870]  ops_exit_list.isra.0+0xa8/0x150
    [  158.771544]  cleanup_net+0x446/0x8f0
    [  158.772945]  ? unregister_pernet_operations+0x4a0/0x4a0
    [  158.775294]  process_one_work+0xa1a/0x1740
    [  158.776896]  ? pwq_dec_nr_in_flight+0x310/0x310
    [  158.779143]  ? do_raw_spin_lock+0x11b/0x280
    [  158.780848]  worker_thread+0x9e/0x1060
    [  158.782500]  ? process_one_work+0x1740/0x1740
    [  158.784454]  kthread+0x31b/0x420
    [  158.786082]  ? __kthread_create_on_node+0x3f0/0x3f0
    [  158.788286]  ret_from_fork+0x3a/0x50
    [  158.789871] ---[ end trace defd6c657c71f936 ]---
    [  158.792273] RIP: 0010:default_device_exit.cold+0x1d/0x1f
    [  158.795478] Code: 84 e8 18 c9 3e fe 0f 0b e9 70 90 ff ff e8 36 e4 52 fe 89 d9 4c 89 e2 48 c7 c6 80 d6 25 84 48 c7 c7 20 c0 25 84 e8 f4 c8 3e
    [  158.804854] RSP: 0018:ffff8880347e7b90 EFLAGS: 00010282
    [  158.807865] RAX: 000000000000003b RBX: 00000000ffffffef RCX: 0000000000000000
    [  158.811794] RDX: 0000000000000000 RSI: ffffffff8128013d RDI: ffffed10068fcf64
    [  158.816652] RBP: ffff888033550170 R08: 000000000000003b R09: fffffbfff0b94b9c
    [  158.820930] R10: fffffbfff0b94b9b R11: ffffffff85ca5cdf R12: ffff888032f28000
    [  158.825113] R13: dffffc0000000000 R14: ffff8880335501b8 R15: 1ffff110068fcf72
    [  158.829899] FS:  0000000000000000(0000) GS:ffff888036000000(0000) knlGS:0000000000000000
    [  158.834923] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  158.838164] CR2: 00007fe8b45d21d0 CR3: 00000000340b4005 CR4: 0000000000360ef0
    [  158.841917] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [  158.845149] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    
    Fix this by checking if a device with the same name exists in init_net
    and fallback to original code - dev%d to allocate name - in case it does.
    
    This was found using syzkaller.
    
    Fixes: aca51397d014 ("netns: Fix arbitrary net_device-s corruptions on net_ns stop.")
    Signed-off-by: Jiri Pirko <jiri@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 8c63189ddabaf3a7fb58bb0402d1d2233b4b6edf
Author: Jia-Ju Bai <baijiaju1990@gmail.com>
Date:   Mon Jul 29 16:24:33 2019 +0800

    net: sched: Fix a possible null-pointer dereference in dequeue_func()
    
    commit 051c7b39be4a91f6b7d8c4548444e4b850f1f56c upstream.
    
    In dequeue_func(), there is an if statement on line 74 to check whether
    skb is NULL:
        if (skb)
    
    When skb is NULL, it is used on line 77:
        prefetch(&skb->end);
    
    Thus, a possible null-pointer dereference may occur.
    
    To fix this bug, skb->end is used when skb is not NULL.
    
    This bug is found by a static analysis tool STCheck written by us.
    
    Fixes: 76e3cc126bb2 ("codel: Controlled Delay AQM")
    Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
    Reviewed-by: Jiri Pirko <jiri@mellanox.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 a91e913e8f7aba2b485161379f5f9b63fce373c3
Author: Will Deacon <will@kernel.org>
Date:   Mon Jul 29 11:06:17 2019 +0100

    arm64: compat: Allow single-byte watchpoints on all addresses
    
    commit 849adec41203ac5837c40c2d7e08490ffdef3c2c upstream.
    
    Commit d968d2b801d8 ("ARM: 7497/1: hw_breakpoint: allow single-byte
    watchpoints on all addresses") changed the validation requirements for
    hardware watchpoints on arch/arm/. Update our compat layer to implement
    the same relaxation.
    
    Signed-off-by: Will Deacon <will@kernel.org>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 25e9dd3fecad406a5f57a1af87f15812fb752c88
Author: Sudarsana Reddy Kalluru <skalluru@marvell.com>
Date:   Tue Jul 23 19:32:41 2019 -0700

    bnx2x: Disable multi-cos feature.
    
    commit d1f0b5dce8fda09a7f5f04c1878f181d548e42f5 upstream.
    
    Commit 3968d38917eb ("bnx2x: Fix Multi-Cos.") which enabled multi-cos
    feature after prolonged time in driver added some regression causing
    numerous issues (sudden reboots, tx timeout etc.) reported by customers.
    We plan to backout this commit and submit proper fix once we have root
    cause of issues reported with this feature enabled.
    
    Fixes: 3968d38917eb ("bnx2x: Fix Multi-Cos.")
    Signed-off-by: Sudarsana Reddy Kalluru <skalluru@marvell.com>
    Signed-off-by: Manish Chopra <manishc@marvell.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 2cc1530d9526313029f909e6cd6f4718ab0693f6
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Thu Jul 18 15:03:15 2019 +0200

    tty/ldsem, locking/rwsem: Add missing ACQUIRE to read_failed sleep loop
    
    commit 952041a8639a7a3a73a2b6573cb8aa8518bc39f8 upstream.
    
    While reviewing rwsem down_slowpath, Will noticed ldsem had a copy of
    a bug we just found for rwsem.
    
      X = 0;
    
      CPU0                  CPU1
    
      rwsem_down_read()
        for (;;) {
          set_current_state(TASK_UNINTERRUPTIBLE);
    
                            X = 1;
                            rwsem_up_write();
                              rwsem_mark_wake()
                                atomic_long_add(adjustment, &sem->count);
                                smp_store_release(&waiter->task, NULL);
    
          if (!waiter.task)
            break;
    
          ...
        }
    
      r = X;
    
    Allows 'r == 0'.
    
    Reported-by: Will Deacon <will@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: Will Deacon <will@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Hurley <peter@hurleysoftware.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Fixes: 4898e640caf0 ("tty: Add timed, writer-prioritized rw semaphore")
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit e65d89d6e78cf1463e755a33e013bde15b894cf5
Author: Jann Horn <jannh@google.com>
Date:   Tue Jul 16 17:20:45 2019 +0200

    sched/fair: Don't free p->numa_faults with concurrent readers
    
    commit 16d51a590a8ce3befb1308e0e7ab77f3b661af33 upstream.
    
    When going through execve(), zero out the NUMA fault statistics instead of
    freeing them.
    
    During execve, the task is reachable through procfs and the scheduler. A
    concurrent /proc/*/sched reader can read data from a freed ->numa_faults
    allocation (confirmed by KASAN) and write it back to userspace.
    I believe that it would also be possible for a use-after-free read to occur
    through a race between a NUMA fault and execve(): task_numa_fault() can
    lead to task_numa_compare(), which invokes task_weight() on the currently
    running task of a different CPU.
    
    Another way to fix this would be to make ->numa_faults RCU-managed or add
    extra locking, but it seems easier to wipe the NUMA fault statistics on
    execve.
    
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Will Deacon <will@kernel.org>
    Fixes: 82727018b0d3 ("sched/numa: Call task_numa_free() from do_execve()")
    Link: https://lkml.kernel.org/r/20190716152047.14424-1-jannh@google.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    [bwh: Backported to 3.16: adjust filename, context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit ed0f0cbd7d3c737328e40982cc8ec7f63477f828
Author: Kefeng Wang <wangkefeng.wang@huawei.com>
Date:   Thu Jul 11 21:27:57 2019 +0800

    hpet: Fix division by zero in hpet_time_div()
    
    commit 0c7d37f4d9b8446956e97b7c5e61173cdb7c8522 upstream.
    
    The base value in do_div() called by hpet_time_div() is truncated from
    unsigned long to uint32_t, resulting in a divide-by-zero exception.
    
    UBSAN: Undefined behaviour in ../drivers/char/hpet.c:572:2
    division by zero
    CPU: 1 PID: 23682 Comm: syz-executor.3 Not tainted 4.4.184.x86_64+ #4
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014
     0000000000000000 b573382df1853d00 ffff8800a3287b98 ffffffff81ad7561
     ffff8800a3287c00 ffffffff838b35b0 ffffffff838b3860 ffff8800a3287c20
     0000000000000000 ffff8800a3287bb0 ffffffff81b8f25e ffffffff838b35a0
    Call Trace:
     [<ffffffff81ad7561>] __dump_stack lib/dump_stack.c:15 [inline]
     [<ffffffff81ad7561>] dump_stack+0xc1/0x120 lib/dump_stack.c:51
     [<ffffffff81b8f25e>] ubsan_epilogue+0x12/0x8d lib/ubsan.c:166
     [<ffffffff81b900cb>] __ubsan_handle_divrem_overflow+0x282/0x2c8 lib/ubsan.c:262
     [<ffffffff823560dd>] hpet_time_div drivers/char/hpet.c:572 [inline]
     [<ffffffff823560dd>] hpet_ioctl_common drivers/char/hpet.c:663 [inline]
     [<ffffffff823560dd>] hpet_ioctl_common.cold+0xa8/0xad drivers/char/hpet.c:577
     [<ffffffff81e63d56>] hpet_ioctl+0xc6/0x180 drivers/char/hpet.c:676
     [<ffffffff81711590>] vfs_ioctl fs/ioctl.c:43 [inline]
     [<ffffffff81711590>] file_ioctl fs/ioctl.c:470 [inline]
     [<ffffffff81711590>] do_vfs_ioctl+0x6e0/0xf70 fs/ioctl.c:605
     [<ffffffff81711eb4>] SYSC_ioctl fs/ioctl.c:622 [inline]
     [<ffffffff81711eb4>] SyS_ioctl+0x94/0xc0 fs/ioctl.c:613
     [<ffffffff82846003>] tracesys_phase2+0x90/0x95
    
    The main C reproducer autogenerated by syzkaller,
    
      syscall(__NR_mmap, 0x20000000, 0x1000000, 3, 0x32, -1, 0);
      memcpy((void*)0x20000100, "/dev/hpet\000", 10);
      syscall(__NR_openat, 0xffffffffffffff9c, 0x20000100, 0, 0);
      syscall(__NR_ioctl, r[0], 0x40086806, 0x40000000000000);
    
    Fix it by using div64_ul().
    
    Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
    Signed-off-by: Zhang HongJun <zhanghongjun2@huawei.com>
    Reviewed-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20190711132757.130092-1-wangkefeng.wang@huawei.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 60af589b99ee6936715607df92ec28263fa60941
Author: Zhenzhong Duan <zhenzhong.duan@oracle.com>
Date:   Thu Jul 25 10:39:09 2019 +0800

    x86/speculation/mds: Apply more accurate check on hypervisor platform
    
    commit 517c3ba00916383af6411aec99442c307c23f684 upstream.
    
    X86_HYPER_NATIVE isn't accurate for checking if running on native platform,
    e.g. CONFIG_HYPERVISOR_GUEST isn't set or "nopv" is enabled.
    
    Checking the CPU feature bit X86_FEATURE_HYPERVISOR to determine if it's
    running on native platform is more accurate.
    
    This still doesn't cover the platforms on which X86_FEATURE_HYPERVISOR is
    unsupported, e.g. VMware, but there is nothing which can be done about this
    scenario.
    
    Fixes: 8a4b06d391b0 ("x86/speculation/mds: Add sysfs reporting for MDS")
    Signed-off-by: Zhenzhong Duan <zhenzhong.duan@oracle.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lkml.kernel.org/r/1564022349-17338-1-git-send-email-zhenzhong.duan@oracle.com
    [bwh: Backported to 3.16: The old hypervisor check looked a bit different
     here.]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 87df15bad1762699a4fe808a8567ce18a4293e51
Author: Phong Tran <tranmanphong@gmail.com>
Date:   Wed Jul 24 09:06:01 2019 +0700

    usb: wusbcore: fix unbalanced get/put cluster_id
    
    commit f90bf1ece48a736097ea224430578fe586a9544c upstream.
    
    syzboot reported that
    https://syzkaller.appspot.com/bug?extid=fd2bd7df88c606eea4ef
    
    There is not consitency parameter in cluste_id_get/put calling.
    In case of getting the id with result is failure, the wusbhc->cluster_id
    will not be updated and this can not be used for wusb_cluster_id_put().
    
    Tested report
    https://groups.google.com/d/msg/syzkaller-bugs/0znZopp3-9k/oxOrhLkLEgAJ
    
    Reproduce and gdb got the details:
    
    139             addr = wusb_cluster_id_get();
    (gdb) n
    140             if (addr == 0)
    (gdb) print addr
    $1 = 254 '\376'
    (gdb) n
    142             result = __hwahc_set_cluster_id(hwahc, addr);
    (gdb) print result
    $2 = -71
    (gdb) break wusb_cluster_id_put
    Breakpoint 3 at 0xffffffff836e3f20: file drivers/usb/wusbcore/wusbhc.c, line 384.
    (gdb) s
    Thread 2 hit Breakpoint 3, wusb_cluster_id_put (id=0 '\000') at drivers/usb/wusbcore/wusbhc.c:384
    384             id = 0xff - id;
    (gdb) n
    385             BUG_ON(id >= CLUSTER_IDS);
    (gdb) print id
    $3 = 255 '\377'
    
    Reported-by: syzbot+fd2bd7df88c606eea4ef@syzkaller.appspotmail.com
    Signed-off-by: Phong Tran <tranmanphong@gmail.com>
    Link: https://lore.kernel.org/r/20190724020601.15257-1-tranmanphong@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 21025698e354e52cf73bf1a3840c0d86387da702
Author: Ryan Kennedy <ryan5544@gmail.com>
Date:   Thu Jul 4 11:35:28 2019 -0400

    usb: pci-quirks: Correct AMD PLL quirk detection
    
    commit f3dccdaade4118070a3a47bef6b18321431f9ac6 upstream.
    
    The AMD PLL USB quirk is incorrectly enabled on newer Ryzen
    chipsets. The logic in usb_amd_find_chipset_info currently checks
    for unaffected chipsets rather than affected ones. This broke
    once a new chipset was added in e788787ef. It makes more sense
    to reverse the logic so it won't need to be updated as new
    chipsets are added. Note that the core of the workaround in
    usb_amd_quirk_pll does correctly check the chipset.
    
    Signed-off-by: Ryan Kennedy <ryan5544@gmail.com>
    Fixes: e788787ef4f9 ("usb:xhci:Add quirk for Certain failing HP keyboard on reset after resume")
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20190704153529.9429-2-ryan5544@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit ed5ed4b048aba0ddf498e63eb31bf0b0d9180aaf
Author: Stephane Grosjean <s.grosjean@peak-system.com>
Date:   Fri Jul 5 15:32:16 2019 +0200

    can: peak_usb: fix potential double kfree_skb()
    
    commit fee6a8923ae0d318a7f7950c6c6c28a96cea099b upstream.
    
    When closing the CAN device while tx skbs are inflight, echo skb could
    be released twice. By calling close_candev() before unlinking all
    pending tx urbs, then the internal echo_skb[] array is fully and
    correctly cleared before the USB write callback and, therefore,
    can_get_echo_skb() are called, for each aborted URB.
    
    Fixes: bb4785551f64 ("can: usb: PEAK-System Technik USB adapters driver core")
    Signed-off-by: Stephane Grosjean <s.grosjean@peak-system.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit ad49f6d62f219e57d7a2e00c28eef456e44fe780
Author: Charles Keepax <ckeepax@opensource.cirrus.com>
Date:   Mon Jul 22 10:24:33 2019 +0100

    ALSA: compress: Fix regression on compressed capture streams
    
    commit 4475f8c4ab7b248991a60d9c02808dbb813d6be8 upstream.
    
    A previous fix to the stop handling on compressed capture streams causes
    some knock on issues. The previous fix updated snd_compr_drain_notify to
    set the state back to PREPARED for capture streams. This causes some
    issues however as the handling for snd_compr_poll differs between the
    two states and some user-space applications were relying on the poll
    failing after the stream had been stopped.
    
    To correct this regression whilst still fixing the original problem the
    patch was addressing, update the capture handling to skip the PREPARED
    state rather than skipping the SETUP state as it has done until now.
    
    Fixes: 4f2ab5e1d13d ("ALSA: compress: Fix stop handling on compressed capture streams")
    Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Acked-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 94388538a8df89c4d2c1b1f954ea5a37645f4a5d
Author: Andreas Koop <andreas.koop@zf.com>
Date:   Mon Jul 22 12:03:06 2019 +0800

    mmc: mmc_spi: Enable stable writes
    
    commit 3a6ffb3c8c3274a39dc8f2514526e645c5d21753 upstream.
    
    While using the mmc_spi driver occasionally errors like this popped up:
    
    mmcblk0: error -84 transferring data end_request: I/O error, dev mmcblk0, sector 581756
    
    I looked on the Internet for occurrences of the same problem and came
    across a helpful post [1]. It includes source code to reproduce the bug.
    There is also an analysis about the cause. During transmission data in the
    supplied buffer is being modified. Thus the previously calculated checksum
    is not correct anymore.
    
    After some digging I found out that device drivers are supposed to report
    they need stable writes. To fix this I set the appropriate flag at queue
    initialization if CRC checksumming is enabled for that SPI host.
    
    [1]
    https://groups.google.com/forum/#!msg/sim1/gLlzWeXGFr8/KevXinUXfc8J
    
    Signed-off-by: Andreas Koop <andreas.koop@zf.com>
    [shihpo: Rebase on top of v5.3-rc1]
    Signed-off-by: ShihPo Hung <shihpo.hung@sifive.com>
    Cc: Paul Walmsley <paul.walmsley@sifive.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    [bwh: Backported to 3.16:
     - request_queue::backing_dev_info is a struct not a pointer
     - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 22b2a775c8524d138bf66be789fa89ce15888072
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sun Jul 21 17:24:18 2019 +0200

    x86/sysfb_efi: Add quirks for some devices with swapped width and height
    
    commit d02f1aa39189e0619c3525d5cd03254e61bf606a upstream.
    
    Some Lenovo 2-in-1s with a detachable keyboard have a portrait screen but
    advertise a landscape resolution and pitch, resulting in a messed up
    display if the kernel tries to show anything on the efifb (because of the
    wrong pitch).
    
    Fix this by adding a new DMI match table for devices which need to have
    their width and height swapped.
    
    At first it was tried to use the existing table for overriding some of the
    efifb parameters, but some of the affected devices have variants with
    different LCD resolutions which will not work with hardcoded override
    values.
    
    Reference: https://bugzilla.redhat.com/show_bug.cgi?id=1730783
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lkml.kernel.org/r/20190721152418.11644-1-hdegoede@redhat.com
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>

commit 087f933cc4219b63b095eb1b0a46e18d86324376
Author: Björn Gerhart <gerhart@posteo.de>
Date:   Mon Jul 15 18:33:55 2019 +0200

    hwmon: (nct6775) Fix register address and added missed tolerance for nct6106
    
    commit f3d43e2e45fd9d44ba52d20debd12cd4ee9c89bf upstream.
    
    Fixed address of third NCT6106_REG_WEIGHT_DUTY_STEP, and
    added missed NCT6106_REG_TOLERANCE_H.
    
    Fixes: 6c009501ff200 ("hwmon: (nct6775) Add support for NCT6102D/6106D")
    Signed-off-by: Bjoern Gerhart <gerhart@posteo.de>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>