commit 8614793dbb41ccf8699ac1aa328702b47efb3b8d
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed May 22 07:38:58 2019 +0200

    Linux 5.0.18

commit 3dacabb35d7fba901429c156060c406ce9770504
Author: Andreas Dilger <adilger@dilger.ca>
Date:   Thu Feb 14 17:52:18 2019 -0500

    ext4: don't update s_rev_level if not required
    
    commit c9e716eb9b3455a83ed7c5f5a81256a3da779a95 upstream.
    
    Don't update the superblock s_rev_level during mount if it isn't
    actually necessary, only if superblock features are being set by
    the kernel.  This was originally added for ext3 since it always
    set the INCOMPAT_RECOVER and HAS_JOURNAL features during mount,
    but this is not needed since no journal mode was added to ext4.
    
    That will allow Geert to mount his 20-year-old ext2 rev 0.0 m68k
    filesystem, as a testament of the backward compatibility of ext4.
    
    Fixes: 0390131ba84f ("ext4: Allow ext4 to run without a journal")
    Signed-off-by: Andreas Dilger <adilger@dilger.ca>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 18f59db712cef3962dc5ab01173010c73dddc70c
Author: zhangyi (F) <yi.zhang@huawei.com>
Date:   Thu Feb 21 11:29:10 2019 -0500

    ext4: fix compile error when using BUFFER_TRACE
    
    commit ddccb6dbe780d68133191477571cb7c69e17bb8c upstream.
    
    Fix compile error below when using BUFFER_TRACE.
    
    fs/ext4/inode.c: In function ‘ext4_expand_extra_isize’:
    fs/ext4/inode.c:5979:19: error: request for member ‘bh’ in something not a structure or union
      BUFFER_TRACE(iloc.bh, "get_write_access");
    
    Fixes: c03b45b853f58 ("ext4, project: expand inode extra size if possible")
    Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 593ddcbac4a4043d9898d4df6382cb35808a7790
Author: Martin Schwidefsky <schwidefsky@de.ibm.com>
Date:   Tue Apr 23 10:53:21 2019 +0200

    s390/mm: convert to the generic get_user_pages_fast code
    
    commit 1a42010cdc26bb7e5912984f3c91b8c6d55f089a upstream.
    
    Define the gup_fast_permitted to check against the asce_limit of the
    mm attached to the current task, then replace the s390 specific gup
    code with the generic implementation in mm/gup.c.
    
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 97249a2034b6855ce4fd08fd9fb0ee2d28a4e825
Author: Martin Schwidefsky <schwidefsky@de.ibm.com>
Date:   Tue Apr 23 10:51:12 2019 +0200

    s390/mm: make the pxd_offset functions more robust
    
    commit d1874a0c2805fcfa9162c972d6b7541e57adb542 upstream.
    
    Change the way how pgd_offset, p4d_offset, pud_offset and pmd_offset
    walk the page tables. pgd_offset now always calculates the index for
    the top-level page table and adds it to the pgd, this is either a
    segment table offset for a 2-level setup, a region-3 offset for 3-levels,
    region-2 offset for 4-levels, or a region-1 offset for a 5-level setup.
    The other three functions p4d_offset, pud_offset and pmd_offset will
    only add the respective offset if they dereference the passed pointer.
    
    With the new way of walking the page tables a sequence like this from
    mm/gup.c now works:
    
         pgdp = pgd_offset(current->mm, addr);
         pgd = READ_ONCE(*pgdp);
         p4dp = p4d_offset(&pgd, addr);
         p4d = READ_ONCE(*p4dp);
         pudp = pud_offset(&p4d, addr);
         pud = READ_ONCE(*pudp);
         pmdp = pmd_offset(&pud, addr);
         pmd = READ_ONCE(*pmdp);
    
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4999174b1a7772c2172804c2840cead989681a21
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Feb 26 10:42:39 2019 -0800

    iov_iter: optimize page_copy_sane()
    
    commit 6daef95b8c914866a46247232a048447fff97279 upstream.
    
    Avoid cache line miss dereferencing struct page if we can.
    
    page_copy_sane() mostly deals with order-0 pages.
    
    Extra cache line miss is visible on TCP recvmsg() calls dealing
    with GRO packets (typically 45 page frags are attached to one skb).
    
    Bringing the 45 struct pages into cpu cache while copying the data
    is not free, since the freeing of the skb (and associated
    page frags put_page()) can happen after cache lines have been evicted.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Matthew Wilcox <willy@infradead.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6e52e4b6cf50c26af2ec20b4b527fc7046892a20
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Tue Apr 30 21:51:21 2019 -0700

    libnvdimm/namespace: Fix label tracking error
    
    commit c4703ce11c23423d4b46e3d59aef7979814fd608 upstream.
    
    Users have reported intermittent occurrences of DIMM initialization
    failures due to duplicate allocations of address capacity detected in
    the labels, or errors of the form below, both have the same root cause.
    
        nd namespace1.4: failed to track label: 0
        WARNING: CPU: 17 PID: 1381 at drivers/nvdimm/label.c:863
    
        RIP: 0010:__pmem_label_update+0x56c/0x590 [libnvdimm]
        Call Trace:
         ? nd_pmem_namespace_label_update+0xd6/0x160 [libnvdimm]
         nd_pmem_namespace_label_update+0xd6/0x160 [libnvdimm]
         uuid_store+0x17e/0x190 [libnvdimm]
         kernfs_fop_write+0xf0/0x1a0
         vfs_write+0xb7/0x1b0
         ksys_write+0x57/0xd0
         do_syscall_64+0x60/0x210
    
    Unfortunately those reports were typically with a busy parallel
    namespace creation / destruction loop making it difficult to see the
    components of the bug. However, Jane provided a simple reproducer using
    the work-in-progress sub-section implementation.
    
    When ndctl is reconfiguring a namespace it may take an existing defunct
    / disabled namespace and reconfigure it with a new uuid and other
    parameters. Critically namespace_update_uuid() takes existing address
    resources and renames them for the new namespace to use / reconfigure as
    it sees fit. The bug is that this rename only happens in the resource
    tracking tree. Existing labels with the old uuid are not reaped leading
    to a scenario where multiple active labels reference the same span of
    address range.
    
    Teach namespace_update_uuid() to flag any references to the old uuid for
    reaping at the next label update attempt.
    
    Cc: <stable@vger.kernel.org>
    Fixes: bf9bccc14c05 ("libnvdimm: pmem label sets and namespace instantiation")
    Link: https://github.com/pmem/ndctl/issues/91
    Reported-by: Jane Chu <jane.chu@oracle.com>
    Reported-by: Jeff Moyer <jmoyer@redhat.com>
    Reported-by: Erwin Tsaur <erwin.tsaur@oracle.com>
    Cc: Johannes Thumshirn <jthumshirn@suse.de>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 63e54af2e570758821efa5807a73eaeca6263d18
Author: Roger Pau Monne <roger.pau@citrix.com>
Date:   Tue Apr 23 15:04:16 2019 +0200

    xen/pvh: correctly setup the PV EFI interface for dom0
    
    commit 72813bfbf0276a97c82af038efb5f02dcdd9e310 upstream.
    
    This involves initializing the boot params EFI related fields and the
    efi global variable.
    
    Without this fix a PVH dom0 doesn't detect when booted from EFI, and
    thus doesn't support accessing any of the EFI related data.
    
    Reported-by: PGNet Dev <pgnet.dev@gmail.com>
    Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
    Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: stable@vger.kernel.org # 4.19+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a1c5c7476db08e2647cd01dc6a7211378d56a221
Author: Roger Pau Monne <roger.pau@citrix.com>
Date:   Tue Apr 23 15:04:15 2019 +0200

    xen/pvh: set xen_domain_type to HVM in xen_pvh_init
    
    commit c9f804d64bb93c8dbf957df1d7e9de11380e522d upstream.
    
    Or else xen_domain() returns false despite xen_pvh being set.
    
    Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
    Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: stable@vger.kernel.org # 4.19+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9339434bdbb4ddb7804f40ceeea8f34c8ae78b45
Author: Masahiro Yamada <yamada.masahiro@socionext.com>
Date:   Sun May 12 11:13:48 2019 +0900

    kbuild: turn auto.conf.cmd into a mandatory include file
    
    commit d2f8ae0e4c5c754f1b2a7b8388d19a1a977e698a upstream.
    
    syncconfig is responsible for keeping auto.conf up-to-date, so if it
    fails for any reason, the build must be terminated immediately.
    
    However, since commit 9390dff66a52 ("kbuild: invoke syncconfig if
    include/config/auto.conf.cmd is missing"), Kbuild continues running
    even after syncconfig fails.
    
    You can confirm this by intentionally making syncconfig error out:
    
    #  diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
    #  index 08ba146..307b9de 100644
    #  --- a/scripts/kconfig/confdata.c
    #  +++ b/scripts/kconfig/confdata.c
    #  @@ -1023,6 +1023,9 @@ int conf_write_autoconf(int overwrite)
    #          FILE *out, *tristate, *out_h;
    #          int i;
    #
    #  +       if (overwrite)
    #  +               return 1;
    #  +
    #          if (!overwrite && is_present(autoconf_name))
    #                  return 0;
    
    Then, syncconfig fails, but Make would not stop:
    
      $ make -s mrproper allyesconfig defconfig
      $ make
      scripts/kconfig/conf  --syncconfig Kconfig
    
      *** Error during sync of the configuration.
    
      make[2]: *** [scripts/kconfig/Makefile;69: syncconfig] Error 1
      make[1]: *** [Makefile;557: syncconfig] Error 2
      make: *** [include/config/auto.conf.cmd] Deleting file 'include/config/tristate.conf'
      make: Failed to remake makefile 'include/config/auto.conf'.
        SYSTBL  arch/x86/include/generated/asm/syscalls_32.h
        SYSHDR  arch/x86/include/generated/asm/unistd_32_ia32.h
        SYSHDR  arch/x86/include/generated/asm/unistd_64_x32.h
        SYSTBL  arch/x86/include/generated/asm/syscalls_64.h
      [ continue running ... ]
    
    The reason is in the behavior of a pattern rule with multi-targets.
    
      %/auto.conf %/auto.conf.cmd %/tristate.conf: $(KCONFIG_CONFIG)
              $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
    
    GNU Make knows this rule is responsible for making all the three files
    simultaneously. As far as examined, auto.conf.cmd is the target in
    question when this rule is invoked. It is probably because auto.conf.cmd
    is included below the inclusion of auto.conf.
    
    The inclusion of auto.conf is mandatory, while that of auto.conf.cmd
    is optional. GNU Make does not care about the failure in the process
    of updating optional include files.
    
    I filed this issue (https://savannah.gnu.org/bugs/?56301) in case this
    behavior could be improved somehow in future releases of GNU Make.
    Anyway, it is quite easy to fix our Makefile.
    
    Given that auto.conf is already a mandatory include file, there is no
    reason to stick auto.conf.cmd optional. Make it mandatory as well.
    
    Cc: linux-stable <stable@vger.kernel.org> # 5.0+
    Fixes: 9390dff66a52 ("kbuild: invoke syncconfig if include/config/auto.conf.cmd is missing")
    Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
    [commented out diff above to keep patch happy - gregkh]
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d71c6a4b31db815aea932d588b318ee21ac1f71c
Author: Sean Christopherson <sean.j.christopherson@intel.com>
Date:   Tue Apr 16 13:32:44 2019 -0700

    KVM: lapic: Busy wait for timer to expire when using hv_timer
    
    commit ee66e453db13d4837a0dcf9d43efa7a88603161b upstream.
    
    ...now that VMX's preemption timer, i.e. the hv_timer, also adjusts its
    programmed time based on lapic_timer_advance_ns.  Without the delay, a
    guest can see a timer interrupt arrive before the requested time when
    KVM is using the hv_timer to emulate the guest's interrupt.
    
    Fixes: c5ce8235cffa0 ("KVM: VMX: Optimize tscdeadline timer latency")
    Cc: <stable@vger.kernel.org>
    Cc: Wanpeng Li <wanpengli@tencent.com>
    Reviewed-by: Liran Alon <liran.alon@oracle.com>
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fae3b156b1969fa961576fb3b49dc11525bc1606
Author: Sean Christopherson <sean.j.christopherson@intel.com>
Date:   Tue Apr 2 08:19:15 2019 -0700

    KVM: x86: Skip EFER vs. guest CPUID checks for host-initiated writes
    
    commit 11988499e62b310f3bf6f6d0a807a06d3f9ccc96 upstream.
    
    KVM allows userspace to violate consistency checks related to the
    guest's CPUID model to some degree.  Generally speaking, userspace has
    carte blanche when it comes to guest state so long as jamming invalid
    state won't negatively affect the host.
    
    Currently this is seems to be a non-issue as most of the interesting
    EFER checks are missing, e.g. NX and LME, but those will be added
    shortly.  Proactively exempt userspace from the CPUID checks so as not
    to break userspace.
    
    Note, the efer_reserved_bits check still applies to userspace writes as
    that mask reflects the host's capabilities, e.g. KVM shouldn't allow a
    guest to run with NX=1 if it has been disabled in the host.
    
    Fixes: d80174745ba39 ("KVM: SVM: Only allow setting of EFER_SVME when CPUID SVM is set")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 87e61d57ae37677c635098ecb33ab25431d7cc6f
Author: Peter Xu <peterx@redhat.com>
Date:   Wed May 8 17:15:45 2019 +0800

    KVM: Fix the bitmap range to copy during clear dirty
    
    commit 4ddc9204572c33f2eb91fbdb1d99d8078388b67d upstream.
    
    kvm_dirty_bitmap_bytes() will return the size of the dirty bitmap of
    the memslot rather than the size of bitmap passed over from the ioctl.
    Here for KVM_CLEAR_DIRTY_LOG we should only copy exactly the size of
    bitmap that covers kvm_clear_dirty_log.num_pages.
    
    Signed-off-by: Peter Xu <peterx@redhat.com>
    Cc: stable@vger.kernel.org
    Fixes: 2a31b9db153530df4aa02dac8c32837bf5f47019
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 295a7bd172d2708f27b67f1594679a8b1d5d30ac
Author: Chengguang Xu <cgxu519@gmail.com>
Date:   Fri May 10 21:15:47 2019 -0400

    jbd2: fix potential double free
    
    commit 0d52154bb0a700abb459a2cbce0a30fc2549b67e upstream.
    
    When failing from creating cache jbd2_inode_cache, we will destroy the
    previously created cache jbd2_handle_cache twice.  This patch fixes
    this by moving each cache initialization/destruction to its own
    separate, individual function.
    
    Signed-off-by: Chengguang Xu <cgxu519@gmail.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a5f8b69097a33b4b52958b9175530b3d07536aff
Author: Michał Wadowski <wadosm@gmail.com>
Date:   Tue May 14 16:58:00 2019 +0200

    ALSA: hda/realtek - Fix for Lenovo B50-70 inverted internal microphone bug
    
    commit 56df90b631fc027fe28b70d41352d820797239bb upstream.
    
    Add patch for realtek codec in Lenovo B50-70 that fixes inverted
    internal microphone channel.
    Device IdeaPad Y410P has the same PCI SSID as Lenovo B50-70,
    but first one is about fix the noise and it didn't seem help in a
    later kernel version.
    So I replaced IdeaPad Y410P device description with B50-70 and apply
    inverted microphone fix.
    
    Bugzilla: https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1524215
    Signed-off-by: Michał Wadowski <wadosm@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 20f6e59997874077caac6d4921e09053bf3609fc
Author: Kailang Yang <kailang@realtek.com>
Date:   Fri May 10 16:28:57 2019 +0800

    ALSA: hda/realtek - Fixup headphone noise via runtime suspend
    
    commit dad3197da7a3817f27bb24f7fd3c135ffa707202 upstream.
    
    Dell platform with ALC298.
    system enter to runtime suspend. Headphone had noise.
    Let Headset Mic not shutup will solve this issue.
    
    [ Fixed minor coding style issues by tiwai ]
    
    Signed-off-by: Kailang Yang <kailang@realtek.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5ddcddba1be6ec17c21ff2dc586c050b83340c0b
Author: Jeremy Soller <jeremy@system76.com>
Date:   Fri May 10 10:15:07 2019 -0400

    ALSA: hda/realtek - Corrected fixup for System76 Gazelle (gaze14)
    
    commit 891afcf2462d2cc4ef7caf94215358ca61fa32cb upstream.
    
    A mistake was made in the identification of the four variants of the
    System76 Gazelle (gaze14). This patch corrects the PCI ID of the
    17-inch, GTX 1660 Ti variant from 0x8560 to 0x8551. This patch also
    adds the correct fixups for the 15-inch and 17-inch GTX 1650 variants
    with PCI IDs 0x8560 and 0x8561.
    
    Tests were done on all four variants ensuring full audio capability.
    
    Fixes: 80a5052db751 ("ALSA: hdea/realtek - Headset fixup for System76 Gazelle (gaze14)")
    Signed-off-by: Jeremy Soller <jeremy@system76.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ec9ff0dd9829bb3596fcf6dc2b24a1f9712266e2
Author: Jan Kara <jack@suse.cz>
Date:   Fri May 17 17:37:18 2019 -0400

    ext4: avoid panic during forced reboot due to aborted journal
    
    commit 2c1d0e3631e5732dba98ef49ac0bec1388776793 upstream.
    
    Handling of aborted journal is a special code path different from
    standard ext4_error() one and it can call panic() as well. Commit
    1dc1097ff60e ("ext4: avoid panic during forced reboot") forgot to update
    this path so fix that omission.
    
    Fixes: 1dc1097ff60e ("ext4: avoid panic during forced reboot")
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org # 5.1
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 297a39c6528c23f24512fec8a74ebc6b4eee3cde
Author: Sahitya Tummala <stummala@codeaurora.org>
Date:   Fri May 10 22:00:33 2019 -0400

    ext4: fix use-after-free in dx_release()
    
    commit 08fc98a4d6424af66eb3ac4e2cedd2fc927ed436 upstream.
    
    The buffer_head (frames[0].bh) and it's corresping page can be
    potentially free'd once brelse() is done inside the for loop
    but before the for loop exits in dx_release(). It can be free'd
    in another context, when the page cache is flushed via
    drop_caches_sysctl_handler(). This results into below data abort
    when accessing info->indirect_levels in dx_release().
    
    Unable to handle kernel paging request at virtual address ffffffc17ac3e01e
    Call trace:
     dx_release+0x70/0x90
     ext4_htree_fill_tree+0x2d4/0x300
     ext4_readdir+0x244/0x6f8
     iterate_dir+0xbc/0x160
     SyS_getdents64+0x94/0x174
    
    Signed-off-by: Sahitya Tummala <stummala@codeaurora.org>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Andreas Dilger <adilger@dilger.ca>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 256e27da8b62ace0935035c1138c7d08be3ace46
Author: Lukas Czerner <lczerner@redhat.com>
Date:   Fri May 10 21:45:33 2019 -0400

    ext4: fix data corruption caused by overlapping unaligned and aligned IO
    
    commit 57a0da28ced8707cb9f79f071a016b9d005caf5a upstream.
    
    Unaligned AIO must be serialized because the zeroing of partial blocks
    of unaligned AIO can result in data corruption in case it's overlapping
    another in flight IO.
    
    Currently we wait for all unwritten extents before we submit unaligned
    AIO which protects data in case of unaligned AIO is following overlapping
    IO. However if a unaligned AIO is followed by overlapping aligned AIO we
    can still end up corrupting data.
    
    To fix this, we must make sure that the unaligned AIO is the only IO in
    flight by waiting for unwritten extents conversion not just before the
    IO submission, but right after it as well.
    
    This problem can be reproduced by xfstest generic/538
    
    Signed-off-by: Lukas Czerner <lczerner@redhat.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7f3b711cbf5486cda4123b84939565c8853e8aea
Author: Sriram Rajagopalan <sriramr@arista.com>
Date:   Fri May 10 19:28:06 2019 -0400

    ext4: zero out the unused memory region in the extent tree block
    
    commit 592acbf16821288ecdc4192c47e3774a4c48bb64 upstream.
    
    This commit zeroes out the unused memory region in the buffer_head
    corresponding to the extent metablock after writing the extent header
    and the corresponding extent node entries.
    
    This is done to prevent random uninitialized data from getting into
    the filesystem when the extent block is synced.
    
    This fixes CVE-2019-11833.
    
    Signed-off-by: Sriram Rajagopalan <sriramr@arista.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bde5b8473bd3796685d99b56f20194f3c40eaf9f
Author: Anup Patel <Anup.Patel@wdc.com>
Date:   Thu Apr 25 06:35:06 2019 -0700

    tty: Don't force RISCV SBI console as preferred console
    
    commit f91253a3d005796404ae0e578b3394459b5f9b71 upstream.
    
    The Linux kernel will auto-disables all boot consoles whenever it
    gets a preferred real console.
    
    Currently on RISC-V systems, if we have a real console which is not
    RISCV SBI console then boot consoles (such as earlycon=sbi) are not
    auto-disabled when a real console (ttyS0 or ttySIF0) is available.
    This results in duplicate prints at boot-time after kernel starts
    using real console (i.e. ttyS0 or ttySIF0) if "earlycon=" kernel
    parameter was passed by bootloader.
    
    The reason for above issue is that RISCV SBI console always adds
    itself as preferred console which is causing other real consoles
    to be not used as preferred console.
    
    Ideally "console=" kernel parameter passed by bootloaders should
    be the one selecting a preferred real console.
    
    This patch fixes above issue by not forcing RISCV SBI console as
    preferred console.
    
    Fixes: afa6b1ccfad5 ("tty: New RISC-V SBI console driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Anup Patel <anup.patel@wdc.com>
    Reviewed-by: Atish Patra <atish.patra@wdc.com>
    Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 549b0b8a94791e6b0e010e7a216c6f51a3104aa7
Author: Jiufei Xue <jiufei.xue@linux.alibaba.com>
Date:   Fri May 17 14:31:44 2019 -0700

    fs/writeback.c: use rcu_barrier() to wait for inflight wb switches going into workqueue when umount
    
    commit ec084de929e419e51bcdafaafe567d9e7d0273b7 upstream.
    
    synchronize_rcu() didn't wait for call_rcu() callbacks, so inode wb
    switch may not go to the workqueue after synchronize_rcu().  Thus
    previous scheduled switches was not finished even flushing the
    workqueue, which will cause a NULL pointer dereferenced followed below.
    
      VFS: Busy inodes after unmount of vdd. Self-destruct in 5 seconds.  Have a nice day...
      BUG: unable to handle kernel NULL pointer dereference at 0000000000000278
        evict+0xb3/0x180
        iput+0x1b0/0x230
        inode_switch_wbs_work_fn+0x3c0/0x6a0
        worker_thread+0x4e/0x490
        ? process_one_work+0x410/0x410
        kthread+0xe6/0x100
        ret_from_fork+0x39/0x50
    
    Replace the synchronize_rcu() call with a rcu_barrier() to wait for all
    pending callbacks to finish.  And inc isw_nr_in_flight after call_rcu()
    in inode_switch_wbs() to make more sense.
    
    Link: http://lkml.kernel.org/r/20190429024108.54150-1-jiufei.xue@linux.alibaba.com
    Signed-off-by: Jiufei Xue <jiufei.xue@linux.alibaba.com>
    Acked-by: Tejun Heo <tj@kernel.org>
    Suggested-by: Tejun Heo <tj@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f7fea7c067fb7ecf8337de1c3c760b4ae34ecf90
Author: Eric Biggers <ebiggers@google.com>
Date:   Thu Apr 18 14:44:27 2019 -0700

    crypto: ccm - fix incompatibility between "ccm" and "ccm_base"
    
    commit 6a1faa4a43f5fabf9cbeaa742d916e7b5e73120f upstream.
    
    CCM instances can be created by either the "ccm" template, which only
    allows choosing the block cipher, e.g. "ccm(aes)"; or by "ccm_base",
    which allows choosing the ctr and cbcmac implementations, e.g.
    "ccm_base(ctr(aes-generic),cbcmac(aes-generic))".
    
    However, a "ccm_base" instance prevents a "ccm" instance from being
    registered using the same implementations.  Nor will the instance be
    found by lookups of "ccm".  This can be used as a denial of service.
    Moreover, "ccm_base" instances are never tested by the crypto
    self-tests, even if there are compatible "ccm" tests.
    
    The root cause of these problems is that instances of the two templates
    use different cra_names.  Therefore, fix these problems by making
    "ccm_base" instances set the same cra_name as "ccm" instances, e.g.
    "ccm(aes)" instead of "ccm_base(ctr(aes-generic),cbcmac(aes-generic))".
    
    This requires extracting the block cipher name from the name of the ctr
    and cbcmac algorithms.  It also requires starting to verify that the
    algorithms are really ctr and cbcmac using the same block cipher, not
    something else entirely.  But it would be bizarre if anyone were
    actually using non-ccm-compatible algorithms with ccm_base, so this
    shouldn't break anyone in practice.
    
    Fixes: 4a49b499dfa0 ("[CRYPTO] ccm: Added CCM mode")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 638fffb11c93d12a91650aeb536a4a344a163ee2
Author: Kamlakant Patel <kamlakantp@marvell.com>
Date:   Wed Apr 24 11:50:43 2019 +0000

    ipmi:ssif: compare block number correctly for multi-part return messages
    
    commit 55be8658c7e2feb11a5b5b33ee031791dbd23a69 upstream.
    
    According to ipmi spec, block number is a number that is incremented,
    starting with 0, for each new block of message data returned using the
    middle transaction.
    
    Here, the 'blocknum' is data[0] which always starts from zero(0) and
    'ssif_info->multi_pos' starts from 1.
    So, we need to add +1 to blocknum while comparing with multi_pos.
    
    Fixes: 7d6380cd40f79 ("ipmi:ssif: Fix handling of multi-part return messages").
    Reported-by: Kiran Kolukuluru <kirank@ami.com>
    Signed-off-by: Kamlakant Patel <kamlakantp@marvell.com>
    Message-Id: <1556106615-18722-1-git-send-email-kamlakantp@marvell.com>
    [Also added a debug log if the block numbers don't match.]
    Signed-off-by: Corey Minyard <cminyard@mvista.com>
    Cc: stable@vger.kernel.org # 4.4
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bfc6980ff235fb6234e94fd4920765da28ff11d5
Author: Coly Li <colyli@suse.de>
Date:   Thu Apr 25 00:48:33 2019 +0800

    bcache: never set KEY_PTRS of journal key to 0 in journal_reclaim()
    
    commit 1bee2addc0c8470c8aaa65ef0599eeae96dd88bc upstream.
    
    In journal_reclaim() ja->cur_idx of each cache will be update to
    reclaim available journal buckets. Variable 'int n' is used to count how
    many cache is successfully reclaimed, then n is set to c->journal.key
    by SET_KEY_PTRS(). Later in journal_write_unlocked(), a for_each_cache()
    loop will write the jset data onto each cache.
    
    The problem is, if all jouranl buckets on each cache is full, the
    following code in journal_reclaim(),
    
    529 for_each_cache(ca, c, iter) {
    530       struct journal_device *ja = &ca->journal;
    531       unsigned int next = (ja->cur_idx + 1) % ca->sb.njournal_buckets;
    532
    533       /* No space available on this device */
    534       if (next == ja->discard_idx)
    535               continue;
    536
    537       ja->cur_idx = next;
    538       k->ptr[n++] = MAKE_PTR(0,
    539                         bucket_to_sector(c, ca->sb.d[ja->cur_idx]),
    540                         ca->sb.nr_this_dev);
    541 }
    542
    543 bkey_init(k);
    544 SET_KEY_PTRS(k, n);
    
    If there is no available bucket to reclaim, the if() condition at line
    534 will always true, and n remains 0. Then at line 544, SET_KEY_PTRS()
    will set KEY_PTRS field of c->journal.key to 0.
    
    Setting KEY_PTRS field of c->journal.key to 0 is wrong. Because in
    journal_write_unlocked() the journal data is written in following loop,
    
    649     for (i = 0; i < KEY_PTRS(k); i++) {
    650-671         submit journal data to cache device
    672     }
    
    If KEY_PTRS field is set to 0 in jouranl_reclaim(), the journal data
    won't be written to cache device here. If system crahed or rebooted
    before bkeys of the lost journal entries written into btree nodes, data
    corruption will be reported during bcache reload after rebooting the
    system.
    
    Indeed there is only one cache in a cache set, there is no need to set
    KEY_PTRS field in journal_reclaim() at all. But in order to keep the
    for_each_cache() logic consistent for now, this patch fixes the above
    problem by not setting 0 KEY_PTRS of journal key, if there is no bucket
    available to reclaim.
    
    Signed-off-by: Coly Li <colyli@suse.de>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5fa31fabc628e70865482eab40310010674cc9d7
Author: Liang Chen <liangchen.linux@gmail.com>
Date:   Thu Apr 25 00:48:31 2019 +0800

    bcache: fix a race between cache register and cacheset unregister
    
    commit a4b732a248d12cbdb46999daf0bf288c011335eb upstream.
    
    There is a race between cache device register and cache set unregister.
    For an already registered cache device, register_bcache will call
    bch_is_open to iterate through all cachesets and check every cache
    there. The race occurs if cache_set_free executes at the same time and
    clears the caches right before ca is dereferenced in bch_is_open_cache.
    To close the race, let's make sure the clean up work is protected by
    the bch_register_lock as well.
    
    This issue can be reproduced as follows,
    while true; do echo /dev/XXX> /sys/fs/bcache/register ; done&
    while true; do echo 1> /sys/block/XXX/bcache/set/unregister ; done &
    
    and results in the following oops,
    
    [  +0.000053] BUG: unable to handle kernel NULL pointer dereference at 0000000000000998
    [  +0.000457] #PF error: [normal kernel read fault]
    [  +0.000464] PGD 800000003ca9d067 P4D 800000003ca9d067 PUD 3ca9c067 PMD 0
    [  +0.000388] Oops: 0000 [#1] SMP PTI
    [  +0.000269] CPU: 1 PID: 3266 Comm: bash Not tainted 5.0.0+ #6
    [  +0.000346] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.11.0-2.fc28 04/01/2014
    [  +0.000472] RIP: 0010:register_bcache+0x1829/0x1990 [bcache]
    [  +0.000344] Code: b0 48 83 e8 50 48 81 fa e0 e1 10 c0 0f 84 a9 00 00 00 48 89 c6 48 89 ca 0f b7 ba 54 04 00 00 4c 8b 82 60 0c 00 00 85 ff 74 2f <49> 3b a8 98 09 00 00 74 4e 44 8d 47 ff 31 ff 49 c1 e0 03 eb 0d
    [  +0.000839] RSP: 0018:ffff92ee804cbd88 EFLAGS: 00010202
    [  +0.000328] RAX: ffffffffc010e190 RBX: ffff918b5c6b5000 RCX: ffff918b7d8e0000
    [  +0.000399] RDX: ffff918b7d8e0000 RSI: ffffffffc010e190 RDI: 0000000000000001
    [  +0.000398] RBP: ffff918b7d318340 R08: 0000000000000000 R09: ffffffffb9bd2d7a
    [  +0.000385] R10: ffff918b7eb253c0 R11: ffffb95980f51200 R12: ffffffffc010e1a0
    [  +0.000411] R13: fffffffffffffff2 R14: 000000000000000b R15: ffff918b7e232620
    [  +0.000384] FS:  00007f955bec2740(0000) GS:ffff918b7eb00000(0000) knlGS:0000000000000000
    [  +0.000420] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  +0.000801] CR2: 0000000000000998 CR3: 000000003cad6000 CR4: 00000000001406e0
    [  +0.000837] Call Trace:
    [  +0.000682]  ? _cond_resched+0x10/0x20
    [  +0.000691]  ? __kmalloc+0x131/0x1b0
    [  +0.000710]  kernfs_fop_write+0xfa/0x170
    [  +0.000733]  __vfs_write+0x2e/0x190
    [  +0.000688]  ? inode_security+0x10/0x30
    [  +0.000698]  ? selinux_file_permission+0xd2/0x120
    [  +0.000752]  ? security_file_permission+0x2b/0x100
    [  +0.000753]  vfs_write+0xa8/0x1a0
    [  +0.000676]  ksys_write+0x4d/0xb0
    [  +0.000699]  do_syscall_64+0x3a/0xf0
    [  +0.000692]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Signed-off-by: Liang Chen <liangchen.linux@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Coly Li <colyli@suse.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0e56cc24df1a1e5a9e2c69dfead430c7d4ed30f1
Author: Filipe Manana <fdmanana@suse.com>
Date:   Mon Apr 22 16:43:42 2019 +0100

    Btrfs: fix race between send and deduplication that lead to failures and crashes
    
    commit 62d54f3a7fa27ef6a74d6cdf643ce04beba3afa7 upstream.
    
    Send operates on read only trees and expects them to never change while it
    is using them. This is part of its initial design, and this expection is
    due to two different reasons:
    
    1) When it was introduced, no operations were allowed to modifiy read-only
       subvolumes/snapshots (including defrag for example).
    
    2) It keeps send from having an impact on other filesystem operations.
       Namely send does not need to keep locks on the trees nor needs to hold on
       to transaction handles and delay transaction commits. This ends up being
       a consequence of the former reason.
    
    However the deduplication feature was introduced later (on September 2013,
    while send was introduced in July 2012) and it allowed for deduplication
    with destination files that belong to read-only trees (subvolumes and
    snapshots).
    
    That means that having a send operation (either full or incremental) running
    in parallel with a deduplication that has the destination inode in one of
    the trees used by the send operation, can result in tree nodes and leaves
    getting freed and reused while send is using them. This problem is similar
    to the problem solved for the root nodes getting freed and reused when a
    snapshot is made against one tree that is currenly being used by a send
    operation, fixed in commits [1] and [2]. These commits explain in detail
    how the problem happens and the explanation is valid for any node or leaf
    that is not the root of a tree as well. This problem was also discussed
    and explained recently in a thread [3].
    
    The problem is very easy to reproduce when using send with large trees
    (snapshots) and just a few concurrent deduplication operations that target
    files in the trees used by send. A stress test case is being sent for
    fstests that triggers the issue easily. The most common error to hit is
    the send ioctl return -EIO with the following messages in dmesg/syslog:
    
     [1631617.204075] BTRFS error (device sdc): did not find backref in send_root. inode=63292, offset=0, disk_byte=5228134400 found extent=5228134400
     [1631633.251754] BTRFS error (device sdc): parent transid verify failed on 32243712 wanted 24 found 27
    
    The first one is very easy to hit while the second one happens much less
    frequently, except for very large trees (in that test case, snapshots
    with 100000 files having large xattrs to get deep and wide trees).
    Less frequently, at least one BUG_ON can be hit:
    
     [1631742.130080] ------------[ cut here ]------------
     [1631742.130625] kernel BUG at fs/btrfs/ctree.c:1806!
     [1631742.131188] invalid opcode: 0000 [#6] SMP DEBUG_PAGEALLOC PTI
     [1631742.131726] CPU: 1 PID: 13394 Comm: btrfs Tainted: G    B D W         5.0.0-rc8-btrfs-next-45 #1
     [1631742.132265] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.11.2-0-gf9626ccb91-prebuilt.qemu-project.org 04/01/2014
     [1631742.133399] RIP: 0010:read_node_slot+0x122/0x130 [btrfs]
     (...)
     [1631742.135061] RSP: 0018:ffffb530021ebaa0 EFLAGS: 00010246
     [1631742.135615] RAX: ffff93ac8912e000 RBX: 000000000000009d RCX: 0000000000000002
     [1631742.136173] RDX: 000000000000009d RSI: ffff93ac564b0d08 RDI: ffff93ad5b48c000
     [1631742.136759] RBP: ffffb530021ebb7d R08: 0000000000000001 R09: ffffb530021ebb7d
     [1631742.137324] R10: ffffb530021eba70 R11: 0000000000000000 R12: ffff93ac87d0a708
     [1631742.137900] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000001
     [1631742.138455] FS:  00007f4cdb1528c0(0000) GS:ffff93ad76a80000(0000) knlGS:0000000000000000
     [1631742.139010] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     [1631742.139568] CR2: 00007f5acb3d0420 CR3: 000000012be3e006 CR4: 00000000003606e0
     [1631742.140131] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     [1631742.140719] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     [1631742.141272] Call Trace:
     [1631742.141826]  ? do_raw_spin_unlock+0x49/0xc0
     [1631742.142390]  tree_advance+0x173/0x1d0 [btrfs]
     [1631742.142948]  btrfs_compare_trees+0x268/0x690 [btrfs]
     [1631742.143533]  ? process_extent+0x1070/0x1070 [btrfs]
     [1631742.144088]  btrfs_ioctl_send+0x1037/0x1270 [btrfs]
     [1631742.144645]  _btrfs_ioctl_send+0x80/0x110 [btrfs]
     [1631742.145161]  ? trace_sched_stick_numa+0xe0/0xe0
     [1631742.145685]  btrfs_ioctl+0x13fe/0x3120 [btrfs]
     [1631742.146179]  ? account_entity_enqueue+0xd3/0x100
     [1631742.146662]  ? reweight_entity+0x154/0x1a0
     [1631742.147135]  ? update_curr+0x20/0x2a0
     [1631742.147593]  ? check_preempt_wakeup+0x103/0x250
     [1631742.148053]  ? do_vfs_ioctl+0xa2/0x6f0
     [1631742.148510]  ? btrfs_ioctl_get_supported_features+0x30/0x30 [btrfs]
     [1631742.148942]  do_vfs_ioctl+0xa2/0x6f0
     [1631742.149361]  ? __fget+0x113/0x200
     [1631742.149767]  ksys_ioctl+0x70/0x80
     [1631742.150159]  __x64_sys_ioctl+0x16/0x20
     [1631742.150543]  do_syscall_64+0x60/0x1b0
     [1631742.150931]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
     [1631742.151326] RIP: 0033:0x7f4cd9f5add7
     (...)
     [1631742.152509] RSP: 002b:00007ffe91017708 EFLAGS: 00000202 ORIG_RAX: 0000000000000010
     [1631742.152892] RAX: ffffffffffffffda RBX: 0000000000000105 RCX: 00007f4cd9f5add7
     [1631742.153268] RDX: 00007ffe91017790 RSI: 0000000040489426 RDI: 0000000000000007
     [1631742.153633] RBP: 0000000000000007 R08: 00007f4cd9e79700 R09: 00007f4cd9e79700
     [1631742.153999] R10: 00007f4cd9e799d0 R11: 0000000000000202 R12: 0000000000000003
     [1631742.154365] R13: 0000555dfae53020 R14: 0000000000000000 R15: 0000000000000001
     (...)
     [1631742.156696] ---[ end trace 5dac9f96dcc3fd6b ]---
    
    That BUG_ON happens because while send is using a node, that node is COWed
    by a concurrent deduplication, gets freed and gets reused as a leaf (because
    a transaction commit happened in between), so when it attempts to read a
    slot from the extent buffer, at ctree.c:read_node_slot(), the extent buffer
    contents were wiped out and it now matches a leaf (which can even belong to
    some other tree now), hitting the BUG_ON(level == 0).
    
    Fix this concurrency issue by not allowing send and deduplication to run
    in parallel if both operate on the same readonly trees, returning EAGAIN
    to user space and logging an exlicit warning in dmesg/syslog.
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=be6821f82c3cc36e026f5afd10249988852b35ea
    [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6f2f0b394b54e2b159ef969a0b5274e9bbf82ff2
    [3] https://lore.kernel.org/linux-btrfs/CAL3q7H7iqSEEyFaEtpRZw3cp613y+4k2Q8b4W7mweR3tZA05bQ@mail.gmail.com/
    
    CC: stable@vger.kernel.org # 4.4+
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0565f46b75e4a27f9175f0faa29c456344ba8693
Author: Filipe Manana <fdmanana@suse.com>
Date:   Wed Apr 17 11:30:30 2019 +0100

    Btrfs: do not start a transaction at iterate_extent_inodes()
    
    commit bfc61c36260ca990937539cd648ede3cd749bc10 upstream.
    
    When finding out which inodes have references on a particular extent, done
    by backref.c:iterate_extent_inodes(), from the BTRFS_IOC_LOGICAL_INO (both
    v1 and v2) ioctl and from scrub we use the transaction join API to grab a
    reference on the currently running transaction, since in order to give
    accurate results we need to inspect the delayed references of the currently
    running transaction.
    
    However, if there is currently no running transaction, the join operation
    will create a new transaction. This is inefficient as the transaction will
    eventually be committed, doing unnecessary IO and introducing a potential
    point of failure that will lead to a transaction abort due to -ENOSPC, as
    recently reported [1].
    
    That's because the join, creates the transaction but does not reserve any
    space, so when attempting to update the root item of the root passed to
    btrfs_join_transaction(), during the transaction commit, we can end up
    failling with -ENOSPC. Users of a join operation are supposed to actually
    do some filesystem changes and reserve space by some means, which is not
    the case of iterate_extent_inodes(), it is a read-only operation for all
    contextes from which it is called.
    
    The reported [1] -ENOSPC failure stack trace is the following:
    
     heisenberg kernel: ------------[ cut here ]------------
     heisenberg kernel: BTRFS: Transaction aborted (error -28)
     heisenberg kernel: WARNING: CPU: 0 PID: 7137 at fs/btrfs/root-tree.c:136 btrfs_update_root+0x22b/0x320 [btrfs]
    (...)
     heisenberg kernel: CPU: 0 PID: 7137 Comm: btrfs-transacti Not tainted 4.19.0-4-amd64 #1 Debian 4.19.28-2
     heisenberg kernel: Hardware name: FUJITSU LIFEBOOK U757/FJNB2A5, BIOS Version 1.21 03/19/2018
     heisenberg kernel: RIP: 0010:btrfs_update_root+0x22b/0x320 [btrfs]
    (...)
     heisenberg kernel: RSP: 0018:ffffb5448828bd40 EFLAGS: 00010286
     heisenberg kernel: RAX: 0000000000000000 RBX: ffff8ed56bccef50 RCX: 0000000000000006
     heisenberg kernel: RDX: 0000000000000007 RSI: 0000000000000092 RDI: ffff8ed6bda166a0
     heisenberg kernel: RBP: 00000000ffffffe4 R08: 00000000000003df R09: 0000000000000007
     heisenberg kernel: R10: 0000000000000000 R11: 0000000000000001 R12: ffff8ed63396a078
     heisenberg kernel: R13: ffff8ed092d7c800 R14: ffff8ed64f5db028 R15: ffff8ed6bd03d068
     heisenberg kernel: FS:  0000000000000000(0000) GS:ffff8ed6bda00000(0000) knlGS:0000000000000000
     heisenberg kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     heisenberg kernel: CR2: 00007f46f75f8000 CR3: 0000000310a0a002 CR4: 00000000003606f0
     heisenberg kernel: DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     heisenberg kernel: DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     heisenberg kernel: Call Trace:
     heisenberg kernel:  commit_fs_roots+0x166/0x1d0 [btrfs]
     heisenberg kernel:  ? _cond_resched+0x15/0x30
     heisenberg kernel:  ? btrfs_run_delayed_refs+0xac/0x180 [btrfs]
     heisenberg kernel:  btrfs_commit_transaction+0x2bd/0x870 [btrfs]
     heisenberg kernel:  ? start_transaction+0x9d/0x3f0 [btrfs]
     heisenberg kernel:  transaction_kthread+0x147/0x180 [btrfs]
     heisenberg kernel:  ? btrfs_cleanup_transaction+0x530/0x530 [btrfs]
     heisenberg kernel:  kthread+0x112/0x130
     heisenberg kernel:  ? kthread_bind+0x30/0x30
     heisenberg kernel:  ret_from_fork+0x35/0x40
     heisenberg kernel: ---[ end trace 05de912e30e012d9 ]---
    
    So fix that by using the attach API, which does not create a transaction
    when there is currently no running transaction.
    
    [1] https://lore.kernel.org/linux-btrfs/b2a668d7124f1d3e410367f587926f622b3f03a4.camel@scientia.net/
    
    Reported-by: Zygo Blaxell <ce3g8jdj@umail.furryterror.org>
    CC: stable@vger.kernel.org # 4.4+
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d48e71659e07d30cf1e2170289fa9804e3051b47
Author: Filipe Manana <fdmanana@suse.com>
Date:   Mon Apr 15 14:50:51 2019 +0100

    Btrfs: do not start a transaction during fiemap
    
    commit 03628cdbc64db6262e50d0357960a4e9562676a1 upstream.
    
    During fiemap, for regular extents (non inline) we need to check if they
    are shared and if they are, set the shared bit. Checking if an extent is
    shared requires checking the delayed references of the currently running
    transaction, since some reference might have not yet hit the extent tree
    and be only in the in-memory delayed references.
    
    However we were using a transaction join for this, which creates a new
    transaction when there is no transaction currently running. That means
    that two more potential failures can happen: creating the transaction and
    committing it. Further, if no write activity is currently happening in the
    system, and fiemap calls keep being done, we end up creating and
    committing transactions that do nothing.
    
    In some extreme cases this can result in the commit of the transaction
    created by fiemap to fail with ENOSPC when updating the root item of a
    subvolume tree because a join does not reserve any space, leading to a
    trace like the following:
    
     heisenberg kernel: ------------[ cut here ]------------
     heisenberg kernel: BTRFS: Transaction aborted (error -28)
     heisenberg kernel: WARNING: CPU: 0 PID: 7137 at fs/btrfs/root-tree.c:136 btrfs_update_root+0x22b/0x320 [btrfs]
    (...)
     heisenberg kernel: CPU: 0 PID: 7137 Comm: btrfs-transacti Not tainted 4.19.0-4-amd64 #1 Debian 4.19.28-2
     heisenberg kernel: Hardware name: FUJITSU LIFEBOOK U757/FJNB2A5, BIOS Version 1.21 03/19/2018
     heisenberg kernel: RIP: 0010:btrfs_update_root+0x22b/0x320 [btrfs]
    (...)
     heisenberg kernel: RSP: 0018:ffffb5448828bd40 EFLAGS: 00010286
     heisenberg kernel: RAX: 0000000000000000 RBX: ffff8ed56bccef50 RCX: 0000000000000006
     heisenberg kernel: RDX: 0000000000000007 RSI: 0000000000000092 RDI: ffff8ed6bda166a0
     heisenberg kernel: RBP: 00000000ffffffe4 R08: 00000000000003df R09: 0000000000000007
     heisenberg kernel: R10: 0000000000000000 R11: 0000000000000001 R12: ffff8ed63396a078
     heisenberg kernel: R13: ffff8ed092d7c800 R14: ffff8ed64f5db028 R15: ffff8ed6bd03d068
     heisenberg kernel: FS:  0000000000000000(0000) GS:ffff8ed6bda00000(0000) knlGS:0000000000000000
     heisenberg kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     heisenberg kernel: CR2: 00007f46f75f8000 CR3: 0000000310a0a002 CR4: 00000000003606f0
     heisenberg kernel: DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     heisenberg kernel: DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     heisenberg kernel: Call Trace:
     heisenberg kernel:  commit_fs_roots+0x166/0x1d0 [btrfs]
     heisenberg kernel:  ? _cond_resched+0x15/0x30
     heisenberg kernel:  ? btrfs_run_delayed_refs+0xac/0x180 [btrfs]
     heisenberg kernel:  btrfs_commit_transaction+0x2bd/0x870 [btrfs]
     heisenberg kernel:  ? start_transaction+0x9d/0x3f0 [btrfs]
     heisenberg kernel:  transaction_kthread+0x147/0x180 [btrfs]
     heisenberg kernel:  ? btrfs_cleanup_transaction+0x530/0x530 [btrfs]
     heisenberg kernel:  kthread+0x112/0x130
     heisenberg kernel:  ? kthread_bind+0x30/0x30
     heisenberg kernel:  ret_from_fork+0x35/0x40
     heisenberg kernel: ---[ end trace 05de912e30e012d9 ]---
    
    Since fiemap (and btrfs_check_shared()) is a read-only operation, do not do
    a transaction join to avoid the overhead of creating a new transaction (if
    there is currently no running transaction) and introducing a potential
    point of failure when the new transaction gets committed, instead use a
    transaction attach to grab a handle for the currently running transaction
    if any.
    
    Reported-by: Christoph Anton Mitterer <calestyo@scientia.net>
    Link: https://lore.kernel.org/linux-btrfs/b2a668d7124f1d3e410367f587926f622b3f03a4.camel@scientia.net/
    Fixes: afce772e87c36c ("btrfs: fix check_shared for fiemap ioctl")
    CC: stable@vger.kernel.org # 4.14+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e7fb540d6a06d2668caf5eb0ddd322f12482daf8
Author: Filipe Manana <fdmanana@suse.com>
Date:   Mon Apr 15 09:29:36 2019 +0100

    Btrfs: send, flush dellaloc in order to avoid data loss
    
    commit 9f89d5de8631c7930898a601b6612e271aa2261c upstream.
    
    When we set a subvolume to read-only mode we do not flush dellaloc for any
    of its inodes (except if the filesystem is mounted with -o flushoncommit),
    since it does not affect correctness for any subsequent operations - except
    for a future send operation. The send operation will not be able to see the
    delalloc data since the respective file extent items, inode item updates,
    backreferences, etc, have not hit yet the subvolume and extent trees.
    
    Effectively this means data loss, since the send stream will not contain
    any data from existing delalloc. Another problem from this is that if the
    writeback starts and finishes while the send operation is in progress, we
    have the subvolume tree being being modified concurrently which can result
    in send failing unexpectedly with EIO or hitting runtime errors, assertion
    failures or hitting BUG_ONs, etc.
    
    Simple reproducer:
    
      $ mkfs.btrfs -f /dev/sdb
      $ mount /dev/sdb /mnt
    
      $ btrfs subvolume create /mnt/sv
      $ xfs_io -f -c "pwrite -S 0xea 0 108K" /mnt/sv/foo
    
      $ btrfs property set /mnt/sv ro true
      $ btrfs send -f /tmp/send.stream /mnt/sv
    
      $ od -t x1 -A d /mnt/sv/foo
      0000000 ea ea ea ea ea ea ea ea ea ea ea ea ea ea ea ea
      *
      0110592
    
      $ umount /mnt
      $ mkfs.btrfs -f /dev/sdc
      $ mount /dev/sdc /mnt
    
      $ btrfs receive -f /tmp/send.stream /mnt
      $ echo $?
      0
      $ od -t x1 -A d /mnt/sv/foo
      0000000
      # ---> empty file
    
    Since this a problem that affects send only, fix it in send by flushing
    dellaloc for all the roots used by the send operation before send starts
    to process the commit roots.
    
    This is a problem that affects send since it was introduced (commit
    31db9f7c23fbf7 ("Btrfs: introduce BTRFS_IOC_SEND for btrfs send/receive"))
    but backporting it to older kernels has some dependencies:
    
    - For kernels between 3.19 and 4.20, it depends on commit 3cd24c698004d2
      ("btrfs: use tagged writepage to mitigate livelock of snapshot") because
      the function btrfs_start_delalloc_snapshot() does not exist before that
      commit. So one has to either pick that commit or replace the calls to
      btrfs_start_delalloc_snapshot() in this patch with calls to
      btrfs_start_delalloc_inodes().
    
    - For kernels older than 3.19 it also requires commit e5fa8f865b3324
      ("Btrfs: ensure send always works on roots without orphans") because
      it depends on the function ensure_commit_roots_uptodate() which that
      commits introduced.
    
    - No dependencies for 5.0+ kernels.
    
    A test case for fstests follows soon.
    
    CC: stable@vger.kernel.org # 3.19+
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b9ee627187491547791aacf96d4dd8f4d9afbf1c
Author: Nikolay Borisov <nborisov@suse.com>
Date:   Mon Mar 25 14:31:21 2019 +0200

    btrfs: Honour FITRIM range constraints during free space trim
    
    commit c2d1b3aae33605a61cbab445d8ae1c708ccd2698 upstream.
    
    Up until now trimming the freespace was done irrespective of what the
    arguments of the FITRIM ioctl were. For example fstrim's -o/-l arguments
    will be entirely ignored. Fix it by correctly handling those paramter.
    This requires breaking if the found freespace extent is after the end of
    the passed range as well as completing trim after trimming
    fstrim_range::len bytes.
    
    Fixes: 499f377f49f0 ("btrfs: iterate over unused chunk space in FITRIM")
    CC: stable@vger.kernel.org # 4.4+
    Signed-off-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4afdd2d2afbbeab511ff68211a80aca24d5be37b
Author: Nikolay Borisov <nborisov@suse.com>
Date:   Thu Mar 14 09:52:35 2019 +0200

    btrfs: Correctly free extent buffer in case btree_read_extent_buffer_pages fails
    
    commit 537f38f019fa0b762dbb4c0fc95d7fcce9db8e2d upstream.
    
    If a an eb fails to be read for whatever reason - it's corrupted on disk
    and parent transid/key validations fail or IO for eb pages fail then
    this buffer must be removed from the buffer cache. Currently the code
    calls free_extent_buffer if an error occurs. Unfortunately this doesn't
    achieve the desired behavior since btrfs_find_create_tree_block returns
    with eb->refs == 2.
    
    On the other hand free_extent_buffer will only decrement the refs once
    leaving it added to the buffer cache radix tree.  This enables later
    code to look up the buffer from the cache and utilize it potentially
    leading to a crash.
    
    The correct way to free the buffer is call free_extent_buffer_stale.
    This function will correctly call atomic_dec explicitly for the buffer
    and subsequently call release_extent_buffer which will decrement the
    final reference thus correctly remove the invalid buffer from buffer
    cache. This change affects only newly allocated buffers since they have
    eb->refs == 2.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=202755
    Reported-by: Jungyeon <jungyeon@gatech.edu>
    CC: stable@vger.kernel.org # 4.4+
    Signed-off-by: Nikolay Borisov <nborisov@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1a6e5f745b577f90ad78fd32d208cbe9b8fb82c7
Author: Qu Wenruo <wqu@suse.com>
Date:   Tue Mar 12 17:10:40 2019 +0800

    btrfs: Check the first key and level for cached extent buffer
    
    commit 448de471cd4cab0cedd15770082567a69a784a11 upstream.
    
    [BUG]
    When reading a file from a fuzzed image, kernel can panic like:
    
      BTRFS warning (device loop0): csum failed root 5 ino 270 off 0 csum 0x98f94189 expected csum 0x00000000 mirror 1
      assertion failed: !memcmp_extent_buffer(b, &disk_key, offsetof(struct btrfs_leaf, items[0].key), sizeof(disk_key)), file: fs/btrfs/ctree.c, line: 2544
      ------------[ cut here ]------------
      kernel BUG at fs/btrfs/ctree.h:3500!
      invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
      RIP: 0010:btrfs_search_slot.cold.24+0x61/0x63 [btrfs]
      Call Trace:
       btrfs_lookup_csum+0x52/0x150 [btrfs]
       __btrfs_lookup_bio_sums+0x209/0x640 [btrfs]
       btrfs_submit_bio_hook+0x103/0x170 [btrfs]
       submit_one_bio+0x59/0x80 [btrfs]
       extent_read_full_page+0x58/0x80 [btrfs]
       generic_file_read_iter+0x2f6/0x9d0
       __vfs_read+0x14d/0x1a0
       vfs_read+0x8d/0x140
       ksys_read+0x52/0xc0
       do_syscall_64+0x60/0x210
       entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    [CAUSE]
    The fuzzed image has a corrupted leaf whose first key doesn't match its
    parent:
    
      checksum tree key (CSUM_TREE ROOT_ITEM 0)
      node 29741056 level 1 items 14 free 107 generation 19 owner CSUM_TREE
      fs uuid 3381d111-94a3-4ac7-8f39-611bbbdab7e6
      chunk uuid 9af1c3c7-2af5-488b-8553-530bd515f14c
            ...
              key (EXTENT_CSUM EXTENT_CSUM 79691776) block 29761536 gen 19
    
      leaf 29761536 items 1 free space 1726 generation 19 owner CSUM_TREE
      leaf 29761536 flags 0x1(WRITTEN) backref revision 1
      fs uuid 3381d111-94a3-4ac7-8f39-611bbbdab7e6
      chunk uuid 9af1c3c7-2af5-488b-8553-530bd515f14c
              item 0 key (EXTENT_CSUM EXTENT_CSUM 8798638964736) itemoff 1751 itemsize 2244
                      range start 8798638964736 end 8798641262592 length 2297856
    
    When reading the above tree block, we have extent_buffer->refs = 2 in
    the context:
    
    - initial one from __alloc_extent_buffer()
      alloc_extent_buffer()
      |- __alloc_extent_buffer()
         |- atomic_set(&eb->refs, 1)
    
    - one being added to fs_info->buffer_radix
      alloc_extent_buffer()
      |- check_buffer_tree_ref()
         |- atomic_inc(&eb->refs)
    
    So if even we call free_extent_buffer() in read_tree_block or other
    similar situation, we only decrease the refs by 1, it doesn't reach 0
    and won't be freed right now.
    
    The staled eb and its corrupted content will still be kept cached.
    
    Furthermore, we have several extra cases where we either don't do first
    key check or the check is not proper for all callers:
    
    - scrub
      We just don't have first key in this context.
    
    - shared tree block
      One tree block can be shared by several snapshot/subvolume trees.
      In that case, the first key check for one subvolume doesn't apply to
      another.
    
    So for the above reasons, a corrupted extent buffer can sneak into the
    buffer cache.
    
    [FIX]
    Call verify_level_key in read_block_for_search to do another
    verification. For that purpose the function is exported.
    
    Due to above reasons, although we can free corrupted extent buffer from
    cache, we still need the check in read_block_for_search(), for scrub and
    shared tree blocks.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=202755
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=202757
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=202759
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=202761
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=202767
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=202769
    Reported-by: Yoon Jungyeon <jungyeon@gatech.edu>
    CC: stable@vger.kernel.org # 4.19+
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f325062756d0ef02b9897ea996cca656aa377938
Author: Debabrata Banerjee <dbanerje@akamai.com>
Date:   Tue Apr 30 23:08:15 2019 -0400

    ext4: fix ext4_show_options for file systems w/o journal
    
    commit 50b29d8f033a7c88c5bc011abc2068b1691ab755 upstream.
    
    Instead of removing EXT4_MOUNT_JOURNAL_CHECKSUM from s_def_mount_opt as
    I assume was intended, all other options were blown away leading to
    _ext4_show_options() output being incorrect.
    
    Fixes: 1e381f60dad9 ("ext4: do not allow journal_opts for fs w/o journal")
    Signed-off-by: Debabrata Banerjee <dbanerje@akamai.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 91bf9123ce86d6128187552e6380c60094ef7b98
Author: Kirill Tkhai <ktkhai@virtuozzo.com>
Date:   Thu Apr 25 13:06:18 2019 -0400

    ext4: actually request zeroing of inode table after grow
    
    commit 310a997fd74de778b9a4848a64be9cda9f18764a upstream.
    
    It is never possible, that number of block groups decreases,
    since only online grow is supported.
    
    But after a growing occured, we have to zero inode tables
    for just created new block groups.
    
    Fixes: 19c5246d2516 ("ext4: add new online resize interface")
    Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 715f547a6299c211a9104105e7ee59c0984acc1e
Author: Barret Rhoden <brho@google.com>
Date:   Thu Apr 25 11:55:50 2019 -0400

    ext4: fix use-after-free race with debug_want_extra_isize
    
    commit 7bc04c5c2cc467c5b40f2b03ba08da174a0d5fa7 upstream.
    
    When remounting with debug_want_extra_isize, we were not performing the
    same checks that we do during a normal mount.  That allowed us to set a
    value for s_want_extra_isize that reached outside the s_inode_size.
    
    Fixes: e2b911c53584 ("ext4: clean up feature test macros with predicate functions")
    Reported-by: syzbot+f584efa0ac7213c226b7@syzkaller.appspotmail.com
    Reviewed-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Barret Rhoden <brho@google.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 310aea022196a29485b2bf79c7516210a4fcddad
Author: Pan Bian <bianpan2016@163.com>
Date:   Thu Apr 25 11:44:15 2019 -0400

    ext4: avoid drop reference to iloc.bh twice
    
    commit 8c380ab4b7b59c0c602743810be1b712514eaebc upstream.
    
    The reference to iloc.bh has been dropped in ext4_mark_iloc_dirty.
    However, the reference is dropped again if error occurs during
    ext4_handle_dirty_metadata, which may result in use-after-free bugs.
    
    Fixes: fb265c9cb49e("ext4: add ext4_sb_bread() to disambiguate ENOMEM cases")
    Signed-off-by: Pan Bian <bianpan2016@163.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7db933229f647f487acbca280c5df0a219d94a3b
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Wed Apr 10 00:37:36 2019 -0400

    ext4: ignore e_value_offs for xattrs with value-in-ea-inode
    
    commit e5d01196c0428a206f307e9ee5f6842964098ff0 upstream.
    
    In other places in fs/ext4/xattr.c, if e_value_inum is non-zero, the
    code ignores the value in e_value_offs.  The e_value_offs *should* be
    zero, but we shouldn't depend upon it, since it might not be true in a
    corrupted/fuzzed file system.
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=202897
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=202877
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7dfca4b97693ab8ae4a0953c0bd2be0b33f56f2e
Author: Jan Kara <jack@suse.cz>
Date:   Sat Apr 6 18:33:06 2019 -0400

    ext4: make sanity check in mballoc more strict
    
    commit 31562b954b60f02acb91b7349dc6432d3f8c3c5f upstream.
    
    The sanity check in mb_find_extent() only checked that returned extent
    does not extend past blocksize * 8, however it should not extend past
    EXT4_CLUSTERS_PER_GROUP(sb). This can happen when clusters_per_group <
    blocksize * 8 and the tail of the bitmap is not properly filled by 1s
    which happened e.g. when ancient kernels have grown the filesystem.
    
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 39108bea309de4630349b6f6b31a50258f1c6487
Author: Jiufei Xue <jiufei.xue@linux.alibaba.com>
Date:   Sat Apr 6 18:57:40 2019 -0400

    jbd2: check superblock mapped prior to committing
    
    commit 742b06b5628f2cd23cb51a034cb54dc33c6162c5 upstream.
    
    We hit a BUG at fs/buffer.c:3057 if we detached the nbd device
    before unmounting ext4 filesystem.
    
    The typical chain of events leading to the BUG:
    jbd2_write_superblock
      submit_bh
        submit_bh_wbc
          BUG_ON(!buffer_mapped(bh));
    
    The block device is removed and all the pages are invalidated. JBD2
    was trying to write journal superblock to the block device which is
    no longer present.
    
    Fix this by checking the journal superblock's buffer head prior to
    submitting.
    
    Reported-by: Eric Ren <renzhen@linux.alibaba.com>
    Signed-off-by: Jiufei Xue <jiufei.xue@linux.alibaba.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 033b15ff6b92a7b20d59bd0f99811bb4dd13d024
Author: Sergei Trofimovich <slyfox@gentoo.org>
Date:   Sun Mar 10 21:24:15 2019 +0000

    tty/vt: fix write/write race in ioctl(KDSKBSENT) handler
    
    commit 46ca3f735f345c9d87383dd3a09fa5d43870770e upstream.
    
    The bug manifests as an attempt to access deallocated memory:
    
        BUG: unable to handle kernel paging request at ffff9c8735448000
        #PF error: [PROT] [WRITE]
        PGD 288a05067 P4D 288a05067 PUD 288a07067 PMD 7f60c2063 PTE 80000007f5448161
        Oops: 0003 [#1] PREEMPT SMP
        CPU: 6 PID: 388 Comm: loadkeys Tainted: G         C        5.0.0-rc6-00153-g5ded5871030e #91
        Hardware name: Gigabyte Technology Co., Ltd. To be filled by O.E.M./H77M-D3H, BIOS F12 11/14/2013
        RIP: 0010:__memmove+0x81/0x1a0
        Code: 4c 89 4f 10 4c 89 47 18 48 8d 7f 20 73 d4 48 83 c2 20 e9 a2 00 00 00 66 90 48 89 d1 4c 8b 5c 16 f8 4c 8d 54 17 f8 48 c1 e9 03 <f3> 48 a5 4d 89 1a e9 0c 01 00 00 0f 1f 40 00 48 89 d1 4c 8b 1e 49
        RSP: 0018:ffffa1b9002d7d08 EFLAGS: 00010203
        RAX: ffff9c873541af43 RBX: ffff9c873541af43 RCX: 00000c6f105cd6bf
        RDX: 0000637882e986b6 RSI: ffff9c8735447ffb RDI: ffff9c8735447ffb
        RBP: ffff9c8739cd3800 R08: ffff9c873b802f00 R09: 00000000fffff73b
        R10: ffffffffb82b35f1 R11: 00505b1b004d5b1b R12: 0000000000000000
        R13: ffff9c873541af3d R14: 000000000000000b R15: 000000000000000c
        FS:  00007f450c390580(0000) GS:ffff9c873f180000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: ffff9c8735448000 CR3: 00000007e213c002 CR4: 00000000000606e0
        Call Trace:
         vt_do_kdgkb_ioctl+0x34d/0x440
         vt_ioctl+0xba3/0x1190
         ? __bpf_prog_run32+0x39/0x60
         ? mem_cgroup_commit_charge+0x7b/0x4e0
         tty_ioctl+0x23f/0x920
         ? preempt_count_sub+0x98/0xe0
         ? __seccomp_filter+0x67/0x600
         do_vfs_ioctl+0xa2/0x6a0
         ? syscall_trace_enter+0x192/0x2d0
         ksys_ioctl+0x3a/0x70
         __x64_sys_ioctl+0x16/0x20
         do_syscall_64+0x54/0xe0
         entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    The bug manifests on systemd systems with multiple vtcon devices:
      # cat /sys/devices/virtual/vtconsole/vtcon0/name
      (S) dummy device
      # cat /sys/devices/virtual/vtconsole/vtcon1/name
      (M) frame buffer device
    
    There systemd runs 'loadkeys' tool in tapallel for each vtcon
    instance. This causes two parallel ioctl(KDSKBSENT) calls to
    race into adding the same entry into 'func_table' array at:
    
        drivers/tty/vt/keyboard.c:vt_do_kdgkb_ioctl()
    
    The function has no locking around writes to 'func_table'.
    
    The simplest reproducer is to have initrams with the following
    init on a 8-CPU machine x86_64:
    
        #!/bin/sh
    
        loadkeys -q windowkeys ru4 &
        loadkeys -q windowkeys ru4 &
        loadkeys -q windowkeys ru4 &
        loadkeys -q windowkeys ru4 &
    
        loadkeys -q windowkeys ru4 &
        loadkeys -q windowkeys ru4 &
        loadkeys -q windowkeys ru4 &
        loadkeys -q windowkeys ru4 &
        wait
    
    The change adds lock on write path only. Reads are still racy.
    
    CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    CC: Jiri Slaby <jslaby@suse.com>
    Link: https://lkml.org/lkml/2019/2/17/256
    Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 770e812bbc1dd9d2363712cd6d9ef3f7936a7bd2
Author: Yifeng Li <tomli@tomli.me>
Date:   Tue Mar 5 07:02:49 2019 +0800

    tty: vt.c: Fix TIOCL_BLANKSCREEN console blanking if blankinterval == 0
    
    commit 75ddbc1fb11efac87b611d48e9802f6fe2bb2163 upstream.
    
    Previously, in the userspace, it was possible to use the "setterm" command
    from util-linux to blank the VT console by default, using the following
    command.
    
    According to the man page,
    
    > The force option keeps the screen blank even if a key is pressed.
    
    It was implemented by calling TIOCL_BLANKSCREEN.
    
            case BLANKSCREEN:
                    ioctlarg = TIOCL_BLANKSCREEN;
                    if (ioctl(STDIN_FILENO, TIOCLINUX, &ioctlarg))
                            warn(_("cannot force blank"));
                    break;
    
    However, after Linux 4.12, this command ceased to work anymore, which is
    unexpected. By inspecting the kernel source, it shows that the issue was
    triggered by the side-effect from commit a4199f5eb809 ("tty: Disable
    default console blanking interval").
    
    The console blanking is implemented by function do_blank_screen() in vt.c:
    "blank_state" will be initialized to "blank_normal_wait" in con_init() if
    AND ONLY IF ("blankinterval" > 0). If "blankinterval" is 0, "blank_state"
    will be "blank_off" (== 0), and a call to do_blank_screen() will always
    abort, even if a forced blanking is required from the user by calling
    TIOCL_BLANKSCREEN, the console won't be blanked.
    
    This behavior is unexpected from a user's point-of-view, since it's not
    mentioned in any documentation. The setterm man page suggests it will
    always work, and the kernel comments in uapi/linux/tiocl.h says
    
    > /* keep screen blank even if a key is pressed */
    > #define TIOCL_BLANKSCREEN 14
    
    To fix it, we simply remove the "blank_state != blank_off" check, as
    pointed out by Nicolas Pitre, this check doesn't logically make sense
    and it's safe to remove.
    
    Suggested-by: Nicolas Pitre <nicolas.pitre@linaro.org>
    Fixes: a4199f5eb809 ("tty: Disable default console blanking interval")
    Signed-off-by: Yifeng Li <tomli@tomli.me>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9537358c9452796fb1b21fd55fe0537ed5e04fe6
Author: Chris Packham <chris.packham@alliedtelesis.co.nz>
Date:   Wed Apr 3 15:02:40 2019 +1300

    mtd: maps: Allow MTD_PHYSMAP with MTD_RAM
    
    commit d41970097f10d898cef0eb04bf53d786efd6bbbc upstream.
    
    When the physmap_of_core.c code was merged into physmap-core.c the
    ability to use MTD_PHYSMAP_OF with only MTD_RAM selected was lost.
    Restore this by adding MTD_RAM to the dependencies of MTD_PHYSMAP.
    
    Fixes: commit 642b1e8dbed7 ("mtd: maps: Merge physmap_of.c into physmap-core.c")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
    Reviewed-by: Hamish Martin <hamish.martin@alliedtelesis.co.nz>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 969859b87f8be36f83bd51bfc92a83035b36a894
Author: Chris Packham <chris.packham@alliedtelesis.co.nz>
Date:   Fri Mar 29 15:13:21 2019 +1300

    mtd: maps: physmap: Store gpio_values correctly
    
    commit 64d14c6fe040361ff6aecb825e392cf97837cd9e upstream.
    
    When the gpio-addr-flash.c driver was merged with physmap-core.c the
    code to store the current gpio_values was lost. This meant that once a
    gpio was asserted it was never de-asserted. Fix this by storing the
    current offset in gpio_values like the old driver used to.
    
    Fixes: commit ba32ce95cbd9 ("mtd: maps: Merge gpio-addr-flash.c into physmap-core.c")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
    Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8a2c3433b51b315a676cf8ec7076ebc90aeb022d
Author: Alexander Sverdlin <alexander.sverdlin@nokia.com>
Date:   Tue Mar 19 17:18:07 2019 +0000

    mtd: spi-nor: intel-spi: Avoid crossing 4K address boundary on read/write
    
    commit 2b75ebeea6f4937d4d05ec4982c471cef9a29b7f upstream.
    
    It was observed that reads crossing 4K address boundary are failing.
    
    This limitation is mentioned in Intel documents:
    
    Intel(R) 9 Series Chipset Family Platform Controller Hub (PCH) Datasheet:
    
    "5.26.3 Flash Access
    Program Register Access:
    * Program Register Accesses are not allowed to cross a 4 KB boundary..."
    
    Enhanced Serial Peripheral Interface (eSPI)
    Interface Base Specification (for Client and Server Platforms):
    
    "5.1.4 Address
    For other memory transactions, the address may start or end at any byte
    boundary. However, the address and payload length combination must not
    cross the naturally aligned address boundary of the corresponding Maximum
    Payload Size. It must not cross a 4 KB address boundary."
    
    Avoid this by splitting an operation crossing the boundary into two
    operations.
    
    Fixes: 8afda8b26d01 ("spi-nor: Add support for Intel SPI serial flash controller")
    Cc: stable@vger.kernel.org
    Reported-by: Romain Porte <romain.porte@nokia.com>
    Tested-by: Pascal Fabreges <pascal.fabreges@nokia.com>
    Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com>
    Reviewed-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ed824ff290d3e8bb16ca006cf572923d7fbfdf06
Author: Dmitry Osipenko <digetx@gmail.com>
Date:   Sun May 5 18:43:22 2019 +0300

    mfd: max77620: Fix swapped FPS_PERIOD_MAX_US values
    
    commit ea611d1cc180fbb56982c83cd5142a2b34881f5c upstream.
    
    The FPS_PERIOD_MAX_US definitions are swapped for MAX20024 and MAX77620,
    fix it.
    
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
    Signed-off-by: Lee Jones <lee.jones@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 12061d7ce0ee3b0601d19eef66c2df9fcec67270
Author: Steve Twiss <stwiss.opensource@diasemi.com>
Date:   Fri Apr 26 14:33:35 2019 +0100

    mfd: da9063: Fix OTP control register names to match datasheets for DA9063/63L
    
    commit 6b4814a9451add06d457e198be418bf6a3e6a990 upstream.
    
    Mismatch between what is found in the Datasheets for DA9063 and DA9063L
    provided by Dialog Semiconductor, and the register names provided in the
    MFD registers file. The changes are for the OTP (one-time-programming)
    control registers. The two naming errors are OPT instead of OTP, and
    COUNT instead of CONT (i.e. control).
    
    Cc: Stable <stable@vger.kernel.org>
    Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>
    Signed-off-by: Lee Jones <lee.jones@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 966e7ae49beed0dd72346a4cd6db42c3ba61bc7e
Author: Rajat Jain <rajatja@google.com>
Date:   Mon May 13 12:17:08 2019 -0700

    ACPI: PM: Set enable_for_wake for wakeup GPEs during suspend-to-idle
    
    commit 2f844b61db8297a1f7a06adf2eb5c43381f2c183 upstream.
    
    I noticed that recently multiple systems (chromebooks) couldn't wake
    from S0ix using LID or Keyboard after updating to a newer kernel. I
    bisected and it turned up commit f941d3e41da7 ("ACPI: EC / PM: Disable
    non-wakeup GPEs for suspend-to-idle"). I checked that the issue got
    fixed if that commit was reverted.
    
    I debugged and found that although PNP0C0D:00 (representing the LID)
    is wake capable and should wakeup the system per the code in
    acpi_wakeup_gpe_init() and in drivers/acpi/button.c:
    
    localhost /sys # cat /proc/acpi/wakeup
    Device  S-state   Status   Sysfs node
    LID0      S4    *enabled   platform:PNP0C0D:00
    CREC      S5    *disabled  platform:GOOG0004:00
                    *disabled  platform:cros-ec-dev.1.auto
                    *disabled  platform:cros-ec-accel.0
                    *disabled  platform:cros-ec-accel.1
                    *disabled  platform:cros-ec-gyro.0
                    *disabled  platform:cros-ec-ring.0
                    *disabled  platform:cros-usbpd-charger.2.auto
                    *disabled  platform:cros-usbpd-logger.3.auto
    D015      S3    *enabled   i2c:i2c-ELAN0000:00
    PENH      S3    *enabled   platform:PRP0001:00
    XHCI      S3    *enabled   pci:0000:00:14.0
    GLAN      S4    *disabled
    WIFI      S3    *disabled  pci:0000:00:14.3
    localhost /sys #
    
    On debugging, I found that its corresponding GPE is not being enabled.
    The particular GPE's "gpe_register_info->enable_for_wake" does not
    have any bits set when acpi_enable_all_wakeup_gpes() comes around to
    use it. I looked at code and could not find any other code path that
    should set the bits in "enable_for_wake" bitmask for the wake enabled
    devices for s2idle.  [I do see that it happens for S3 in
    acpi_sleep_prepare()].
    
    Thus I used the same call to enable the GPEs for wake enabled devices,
    and verified that this fixes the regression I was seeing on multiple
    of my devices.
    
    [ rjw: The problem is that commit f941d3e41da7 ("ACPI: EC / PM:
      Disable non-wakeup GPEs for suspend-to-idle") forgot to add
      the acpi_enable_wakeup_devices() call for s2idle along with
      acpi_enable_all_wakeup_gpes(). ]
    
    Fixes: f941d3e41da7 ("ACPI: EC / PM: Disable non-wakeup GPEs for suspend-to-idle")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=203579
    Signed-off-by: Rajat Jain <rajatja@google.com>
    [ rjw: Subject & changelog ]
    Cc: 5.0+ <stable@vger.kernel.org> # 5.0+
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 09ceb529c4acd095c8f987696d20e07af444c48e
Author: Andrea Arcangeli <aarcange@redhat.com>
Date:   Tue May 14 15:40:46 2019 -0700

    userfaultfd: use RCU to free the task struct when fork fails
    
    commit c3f3ce049f7d97cc7ec9c01cb51d9ec74e0f37c2 upstream.
    
    The task structure is freed while get_mem_cgroup_from_mm() holds
    rcu_read_lock() and dereferences mm->owner.
    
      get_mem_cgroup_from_mm()                failing fork()
      ----                                    ---
      task = mm->owner
                                              mm->owner = NULL;
                                              free(task)
      if (task) *task; /* use after free */
    
    The fix consists in freeing the task with RCU also in the fork failure
    case, exactly like it always happens for the regular exit(2) path.  That
    is enough to make the rcu_read_lock hold in get_mem_cgroup_from_mm()
    (left side above) effective to avoid a use after free when dereferencing
    the task structure.
    
    An alternate possible fix would be to defer the delivery of the
    userfaultfd contexts to the monitor until after fork() is guaranteed to
    succeed.  Such a change would require more changes because it would
    create a strict ordering dependency where the uffd methods would need to
    be called beyond the last potentially failing branch in order to be
    safe.  This solution as opposed only adds the dependency to common code
    to set mm->owner to NULL and to free the task struct that was pointed by
    mm->owner with RCU, if fork ends up failing.  The userfaultfd methods
    can still be called anywhere during the fork runtime and the monitor
    will keep discarding orphaned "mm" coming from failed forks in userland.
    
    This race condition couldn't trigger if CONFIG_MEMCG was set =n at build
    time.
    
    [aarcange@redhat.com: improve changelog, reduce #ifdefs per Michal]
      Link: http://lkml.kernel.org/r/20190429035752.4508-1-aarcange@redhat.com
    Link: http://lkml.kernel.org/r/20190325225636.11635-2-aarcange@redhat.com
    Fixes: 893e26e61d04 ("userfaultfd: non-cooperative: Add fork() event")
    Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
    Tested-by: zhong jiang <zhongjiang@huawei.com>
    Reported-by: syzbot+cbb52e396df3e565ab02@syzkaller.appspotmail.com
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Jann Horn <jannh@google.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Mike Rapoport <rppt@linux.vnet.ibm.com>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Jason Gunthorpe <jgg@mellanox.com>
    Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: zhong jiang <zhongjiang@huawei.com>
    Cc: syzbot+cbb52e396df3e565ab02@syzkaller.appspotmail.com
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3f26c01c400136979dde12b44166349af0b0d081
Author: Shuning Zhang <sunny.s.zhang@oracle.com>
Date:   Mon May 13 17:15:56 2019 -0700

    ocfs2: fix ocfs2 read inode data panic in ocfs2_iget
    
    commit e091eab028f9253eac5c04f9141bbc9d170acab3 upstream.
    
    In some cases, ocfs2_iget() reads the data of inode, which has been
    deleted for some reason.  That will make the system panic.  So We should
    judge whether this inode has been deleted, and tell the caller that the
    inode is a bad inode.
    
    For example, the ocfs2 is used as the backed of nfs, and the client is
    nfsv3.  This issue can be reproduced by the following steps.
    
    on the nfs server side,
    ..../patha/pathb
    
    Step 1: The process A was scheduled before calling the function fh_verify.
    
    Step 2: The process B is removing the 'pathb', and just completed the call
    to function dput.  Then the dentry of 'pathb' has been deleted from the
    dcache, and all ancestors have been deleted also.  The relationship of
    dentry and inode was deleted through the function hlist_del_init.  The
    following is the call stack.
    dentry_iput->hlist_del_init(&dentry->d_u.d_alias)
    
    At this time, the inode is still in the dcache.
    
    Step 3: The process A call the function ocfs2_get_dentry, which get the
    inode from dcache.  Then the refcount of inode is 1.  The following is the
    call stack.
    nfsd3_proc_getacl->fh_verify->exportfs_decode_fh->fh_to_dentry(ocfs2_get_dentry)
    
    Step 4: Dirty pages are flushed by bdi threads.  So the inode of 'patha'
    is evicted, and this directory was deleted.  But the inode of 'pathb'
    can't be evicted, because the refcount of the inode was 1.
    
    Step 5: The process A keep running, and call the function
    reconnect_path(in exportfs_decode_fh), which call function
    ocfs2_get_parent of ocfs2.  Get the block number of parent
    directory(patha) by the name of ...  Then read the data from disk by the
    block number.  But this inode has been deleted, so the system panic.
    
    Process A                                             Process B
    1. in nfsd3_proc_getacl                   |
    2.                                        |        dput
    3. fh_to_dentry(ocfs2_get_dentry)         |
    4. bdi flush dirty cache                  |
    5. ocfs2_iget                             |
    
    [283465.542049] OCFS2: ERROR (device sdp): ocfs2_validate_inode_block:
    Invalid dinode #580640: OCFS2_VALID_FL not set
    
    [283465.545490] Kernel panic - not syncing: OCFS2: (device sdp): panic forced
    after error
    
    [283465.546889] CPU: 5 PID: 12416 Comm: nfsd Tainted: G        W
    4.1.12-124.18.6.el6uek.bug28762940v3.x86_64 #2
    [283465.548382] Hardware name: VMware, Inc. VMware Virtual Platform/440BX
    Desktop Reference Platform, BIOS 6.00 09/21/2015
    [283465.549657]  0000000000000000 ffff8800a56fb7b8 ffffffff816e839c
    ffffffffa0514758
    [283465.550392]  000000000008dc20 ffff8800a56fb838 ffffffff816e62d3
    0000000000000008
    [283465.551056]  ffff880000000010 ffff8800a56fb848 ffff8800a56fb7e8
    ffff88005df9f000
    [283465.551710] Call Trace:
    [283465.552516]  [<ffffffff816e839c>] dump_stack+0x63/0x81
    [283465.553291]  [<ffffffff816e62d3>] panic+0xcb/0x21b
    [283465.554037]  [<ffffffffa04e66b0>] ocfs2_handle_error+0xf0/0xf0 [ocfs2]
    [283465.554882]  [<ffffffffa04e7737>] __ocfs2_error+0x67/0x70 [ocfs2]
    [283465.555768]  [<ffffffffa049c0f9>] ocfs2_validate_inode_block+0x229/0x230
    [ocfs2]
    [283465.556683]  [<ffffffffa047bcbc>] ocfs2_read_blocks+0x46c/0x7b0 [ocfs2]
    [283465.557408]  [<ffffffffa049bed0>] ? ocfs2_inode_cache_io_unlock+0x20/0x20
    [ocfs2]
    [283465.557973]  [<ffffffffa049f0eb>] ocfs2_read_inode_block_full+0x3b/0x60
    [ocfs2]
    [283465.558525]  [<ffffffffa049f5ba>] ocfs2_iget+0x4aa/0x880 [ocfs2]
    [283465.559082]  [<ffffffffa049146e>] ocfs2_get_parent+0x9e/0x220 [ocfs2]
    [283465.559622]  [<ffffffff81297c05>] reconnect_path+0xb5/0x300
    [283465.560156]  [<ffffffff81297f46>] exportfs_decode_fh+0xf6/0x2b0
    [283465.560708]  [<ffffffffa062faf0>] ? nfsd_proc_getattr+0xa0/0xa0 [nfsd]
    [283465.561262]  [<ffffffff810a8196>] ? prepare_creds+0x26/0x110
    [283465.561932]  [<ffffffffa0630860>] fh_verify+0x350/0x660 [nfsd]
    [283465.562862]  [<ffffffffa0637804>] ? nfsd_cache_lookup+0x44/0x630 [nfsd]
    [283465.563697]  [<ffffffffa063a8b9>] nfsd3_proc_getattr+0x69/0xf0 [nfsd]
    [283465.564510]  [<ffffffffa062cf60>] nfsd_dispatch+0xe0/0x290 [nfsd]
    [283465.565358]  [<ffffffffa05eb892>] ? svc_tcp_adjust_wspace+0x12/0x30
    [sunrpc]
    [283465.566272]  [<ffffffffa05ea652>] svc_process_common+0x412/0x6a0 [sunrpc]
    [283465.567155]  [<ffffffffa05eaa03>] svc_process+0x123/0x210 [sunrpc]
    [283465.568020]  [<ffffffffa062c90f>] nfsd+0xff/0x170 [nfsd]
    [283465.568962]  [<ffffffffa062c810>] ? nfsd_destroy+0x80/0x80 [nfsd]
    [283465.570112]  [<ffffffff810a622b>] kthread+0xcb/0xf0
    [283465.571099]  [<ffffffff810a6160>] ? kthread_create_on_node+0x180/0x180
    [283465.572114]  [<ffffffff816f11b8>] ret_from_fork+0x58/0x90
    [283465.573156]  [<ffffffff810a6160>] ? kthread_create_on_node+0x180/0x180
    
    Link: http://lkml.kernel.org/r/1554185919-3010-1-git-send-email-sunny.s.zhang@oracle.com
    Signed-off-by: Shuning Zhang <sunny.s.zhang@oracle.com>
    Reviewed-by: Joseph Qi <jiangqi903@gmail.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: piaojun <piaojun@huawei.com>
    Cc: "Gang He" <ghe@suse.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f989305d02a49afbcfa37cbc9bd3281d0742f4a8
Author: Mike Kravetz <mike.kravetz@oracle.com>
Date:   Mon May 13 17:19:41 2019 -0700

    hugetlb: use same fault hash key for shared and private mappings
    
    commit 1b426bac66e6cc83c9f2d92b96e4e72acf43419a upstream.
    
    hugetlb uses a fault mutex hash table to prevent page faults of the
    same pages concurrently.  The key for shared and private mappings is
    different.  Shared keys off address_space and file index.  Private keys
    off mm and virtual address.  Consider a private mappings of a populated
    hugetlbfs file.  A fault will map the page from the file and if needed
    do a COW to map a writable page.
    
    Hugetlbfs hole punch uses the fault mutex to prevent mappings of file
    pages.  It uses the address_space file index key.  However, private
    mappings will use a different key and could race with this code to map
    the file page.  This causes problems (BUG) for the page cache remove
    code as it expects the page to be unmapped.  A sample stack is:
    
    page dumped because: VM_BUG_ON_PAGE(page_mapped(page))
    kernel BUG at mm/filemap.c:169!
    ...
    RIP: 0010:unaccount_page_cache_page+0x1b8/0x200
    ...
    Call Trace:
    __delete_from_page_cache+0x39/0x220
    delete_from_page_cache+0x45/0x70
    remove_inode_hugepages+0x13c/0x380
    ? __add_to_page_cache_locked+0x162/0x380
    hugetlbfs_fallocate+0x403/0x540
    ? _cond_resched+0x15/0x30
    ? __inode_security_revalidate+0x5d/0x70
    ? selinux_file_permission+0x100/0x130
    vfs_fallocate+0x13f/0x270
    ksys_fallocate+0x3c/0x80
    __x64_sys_fallocate+0x1a/0x20
    do_syscall_64+0x5b/0x180
    entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    There seems to be another potential COW issue/race with this approach
    of different private and shared keys as noted in commit 8382d914ebf7
    ("mm, hugetlb: improve page-fault scalability").
    
    Since every hugetlb mapping (even anon and private) is actually a file
    mapping, just use the address_space index key for all mappings.  This
    results in potentially more hash collisions.  However, this should not
    be the common case.
    
    Link: http://lkml.kernel.org/r/20190328234704.27083-3-mike.kravetz@oracle.com
    Link: http://lkml.kernel.org/r/20190412165235.t4sscoujczfhuiyt@linux-r8p5
    Fixes: b5cec28d36f5 ("hugetlbfs: truncate_hugepages() takes a range of pages")
    Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Reviewed-by: Davidlohr Bueso <dbueso@suse.de>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6720e0bc50e9ec17f7ec4c853f9d9ad1313bf8c8
Author: Kai Shen <shenkai8@huawei.com>
Date:   Mon May 13 17:15:37 2019 -0700

    mm/hugetlb.c: don't put_page in lock of hugetlb_lock
    
    commit 2bf753e64b4a702e27ce26ff520c59563c62f96b upstream.
    
    spinlock recursion happened when do LTP test:
    #!/bin/bash
    ./runltp -p -f hugetlb &
    ./runltp -p -f hugetlb &
    ./runltp -p -f hugetlb &
    ./runltp -p -f hugetlb &
    ./runltp -p -f hugetlb &
    
    The dtor returned by get_compound_page_dtor in __put_compound_page may be
    the function of free_huge_page which will lock the hugetlb_lock, so don't
    put_page in lock of hugetlb_lock.
    
     BUG: spinlock recursion on CPU#0, hugemmap05/1079
      lock: hugetlb_lock+0x0/0x18, .magic: dead4ead, .owner: hugemmap05/1079, .owner_cpu: 0
     Call trace:
      dump_backtrace+0x0/0x198
      show_stack+0x24/0x30
      dump_stack+0xa4/0xcc
      spin_dump+0x84/0xa8
      do_raw_spin_lock+0xd0/0x108
      _raw_spin_lock+0x20/0x30
      free_huge_page+0x9c/0x260
      __put_compound_page+0x44/0x50
      __put_page+0x2c/0x60
      alloc_surplus_huge_page.constprop.19+0xf0/0x140
      hugetlb_acct_memory+0x104/0x378
      hugetlb_reserve_pages+0xe0/0x250
      hugetlbfs_file_mmap+0xc0/0x140
      mmap_region+0x3e8/0x5b0
      do_mmap+0x280/0x460
      vm_mmap_pgoff+0xf4/0x128
      ksys_mmap_pgoff+0xb4/0x258
      __arm64_sys_mmap+0x34/0x48
      el0_svc_common+0x78/0x130
      el0_svc_handler+0x38/0x78
      el0_svc+0x8/0xc
    
    Link: http://lkml.kernel.org/r/b8ade452-2d6b-0372-32c2-703644032b47@huawei.com
    Fixes: 9980d744a0 ("mm, hugetlb: get rid of surplus page accounting tricks")
    Signed-off-by: Kai Shen <shenkai8@huawei.com>
    Signed-off-by: Feilong Lin <linfeilong@huawei.com>
    Reported-by: Wang Wang <wangwang2@huawei.com>
    Reviewed-by: Oscar Salvador <osalvador@suse.de>
    Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ff191b1d827df268bddcabc2235f8a99c6c15516
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Mon May 13 17:15:33 2019 -0700

    mm/huge_memory: fix vmf_insert_pfn_{pmd, pud}() crash, handle unaligned addresses
    
    commit fce86ff5802bac3a7b19db171aa1949ef9caac31 upstream.
    
    Starting with c6f3c5ee40c1 ("mm/huge_memory.c: fix modifying of page
    protection by insert_pfn_pmd()") vmf_insert_pfn_pmd() internally calls
    pmdp_set_access_flags().  That helper enforces a pmd aligned @address
    argument via VM_BUG_ON() assertion.
    
    Update the implementation to take a 'struct vm_fault' argument directly
    and apply the address alignment fixup internally to fix crash signatures
    like:
    
        kernel BUG at arch/x86/mm/pgtable.c:515!
        invalid opcode: 0000 [#1] SMP NOPTI
        CPU: 51 PID: 43713 Comm: java Tainted: G           OE     4.19.35 #1
        [..]
        RIP: 0010:pmdp_set_access_flags+0x48/0x50
        [..]
        Call Trace:
         vmf_insert_pfn_pmd+0x198/0x350
         dax_iomap_fault+0xe82/0x1190
         ext4_dax_huge_fault+0x103/0x1f0
         ? __switch_to_asm+0x40/0x70
         __handle_mm_fault+0x3f6/0x1370
         ? __switch_to_asm+0x34/0x70
         ? __switch_to_asm+0x40/0x70
         handle_mm_fault+0xda/0x200
         __do_page_fault+0x249/0x4f0
         do_page_fault+0x32/0x110
         ? page_fault+0x8/0x30
         page_fault+0x1e/0x30
    
    Link: http://lkml.kernel.org/r/155741946350.372037.11148198430068238140.stgit@dwillia2-desk3.amr.corp.intel.com
    Fixes: c6f3c5ee40c1 ("mm/huge_memory.c: fix modifying of page protection by insert_pfn_pmd()")
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Reported-by: Piotr Balcer <piotr.balcer@intel.com>
    Tested-by: Yan Ma <yan.ma@intel.com>
    Tested-by: Pankaj Gupta <pagupta@redhat.com>
    Reviewed-by: Matthew Wilcox <willy@infradead.org>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Chandan Rajendra <chandan@linux.ibm.com>
    Cc: Souptick Joarder <jrdr.linux@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 535ca6f75ddbcaf9673bcbb751486fe9c2b53fd5
Author: Jiri Kosina <jkosina@suse.cz>
Date:   Tue May 14 15:41:38 2019 -0700

    mm/mincore.c: make mincore() more conservative
    
    commit 134fca9063ad4851de767d1768180e5dede9a881 upstream.
    
    The semantics of what mincore() considers to be resident is not
    completely clear, but Linux has always (since 2.3.52, which is when
    mincore() was initially done) treated it as "page is available in page
    cache".
    
    That's potentially a problem, as that [in]directly exposes
    meta-information about pagecache / memory mapping state even about
    memory not strictly belonging to the process executing the syscall,
    opening possibilities for sidechannel attacks.
    
    Change the semantics of mincore() so that it only reveals pagecache
    information for non-anonymous mappings that belog to files that the
    calling process could (if it tried to) successfully open for writing;
    otherwise we'd be including shared non-exclusive mappings, which
    
     - is the sidechannel
    
     - is not the usecase for mincore(), as that's primarily used for data,
       not (shared) text
    
    [jkosina@suse.cz: v2]
      Link: http://lkml.kernel.org/r/20190312141708.6652-2-vbabka@suse.cz
    [mhocko@suse.com: restructure can_do_mincore() conditions]
    Link: http://lkml.kernel.org/r/nycvar.YFH.7.76.1903062342020.19912@cbobk.fhfr.pm
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
    Acked-by: Josh Snyder <joshs@netflix.com>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Originally-by: Linus Torvalds <torvalds@linux-foundation.org>
    Originally-by: Dominique Martinet <asmadeus@codewreck.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Kevin Easton <kevin@guarana.org>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Cyril Hrubis <chrubis@suse.cz>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Kirill A. Shutemov <kirill@shutemov.name>
    Cc: Daniel Gruss <daniel@gruss.cc>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b5b076649d2ec7be156013187fa6932dffc96db3
Author: Ofir Drang <ofir.drang@arm.com>
Date:   Thu Apr 18 16:39:10 2019 +0300

    crypto: ccree - handle tee fips error during power management resume
    
    commit 7138377ce10455b7183c6dde4b2c51b33f464c45 upstream.
    
    in order to support cryptocell tee fips error that may occurs while
    cryptocell ree is suspended, an cc_tee_handle_fips_error  call added
    to the cc_pm_resume function.
    
    Signed-off-by: Ofir Drang <ofir.drang@arm.com>
    Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2380a8464ee19760235b874fac8f125950617d03
Author: Ofir Drang <ofir.drang@arm.com>
Date:   Thu Apr 18 16:39:09 2019 +0300

    crypto: ccree - add function to handle cryptocell tee fips error
    
    commit 897ab2316910a66bb048f1c9cefa25e6a592dcd7 upstream.
    
    Adds function that checks if cryptocell tee fips error occurred
    and in such case triggers system error through kernel panic.
    Change fips function to use this new routine.
    
    Signed-off-by: Ofir Drang <ofir.drang@arm.com>
    Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 22a44b51f2e06c693076c1fa63e45d1a72d81984
Author: Ofir Drang <ofir.drang@arm.com>
Date:   Thu Apr 18 16:39:08 2019 +0300

    crypto: ccree - HOST_POWER_DOWN_EN should be the last CC access during suspend
    
    commit 3499efbeed39d114873267683b9e776bcb34b058 upstream.
    
    During power management suspend the driver need to prepare the device
    for the power down operation and as a last indication write to the
    HOST_POWER_DOWN_EN register which signals to the hardware that
    The ccree is ready for power down.
    
    Signed-off-by: Ofir Drang <ofir.drang@arm.com>
    Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f1a7dc5d0e4643ee7ac80fdfcd82dff8a723a035
Author: Ofir Drang <ofir.drang@arm.com>
Date:   Thu Apr 18 16:39:06 2019 +0300

    crypto: ccree - pm resume first enable the source clk
    
    commit 7766dd774d80463cec7b81d90c8672af91de2da1 upstream.
    
    On power management resume function first enable the device clk source
    to allow access to the device registers.
    
    Signed-off-by: Ofir Drang <ofir.drang@arm.com>
    Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4a807bab143170c1f21e0c9e28db95dbcaf4bd0c
Author: Gilad Ben-Yossef <gilad@benyossef.com>
Date:   Thu Apr 18 16:39:05 2019 +0300

    crypto: ccree - don't map AEAD key and IV on stack
    
    commit e8662a6a5f8f7f2cadc0edb934aef622d96ac3ee upstream.
    
    The AEAD authenc key and IVs might be passed to us on stack. Copy it to
    a slab buffer before mapping to gurantee proper DMA mapping.
    
    Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a1cb31fd79bed843f218731407ef5c4d32715c54
Author: Gilad Ben-Yossef <gilad@benyossef.com>
Date:   Thu Apr 18 16:39:02 2019 +0300

    crypto: ccree - use correct internal state sizes for export
    
    commit f3df82b468f00cca241d96ee3697c9a5e7fb6bd0 upstream.
    
    We were computing the size of the import buffer based on the digest size
    but the 318 and 224 byte variants use 512 and 256 bytes internal state
    sizes respectfully, thus causing the import buffer to overrun.
    
    Fix it by using the right sizes.
    
    Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3ff0364220247003df4efde9603016de448172c3
Author: Gilad Ben-Yossef <gilad@benyossef.com>
Date:   Thu Apr 18 16:39:04 2019 +0300

    crypto: ccree - don't map MAC key on stack
    
    commit 874e163759f27e0a9988c5d1f4605e3f25564fd2 upstream.
    
    The MAC hash key might be passed to us on stack. Copy it to
    a slab buffer before mapping to gurantee proper DMA mapping.
    
    Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2e1679f6a1d056ffe90e9b1faedbbfbddb52f4c2
Author: Gilad Ben-Yossef <gilad@benyossef.com>
Date:   Thu Apr 18 16:38:50 2019 +0300

    crypto: ccree - fix mem leak on error path
    
    commit d574b707c873d6ef1a2a155f8cfcfecd821e9a2e upstream.
    
    Fix a memory leak on the error path of IV generation code.
    
    Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 23a072df0482f9ac7dde802a9f7c892efc592aca
Author: Gilad Ben-Yossef <gilad@benyossef.com>
Date:   Thu Apr 18 16:38:48 2019 +0300

    crypto: ccree - remove special handling of chained sg
    
    commit c4b22bf51b815fb61a35a27fc847a88bc28ebb63 upstream.
    
    We were handling chained scattergather lists with specialized code
    needlessly as the regular sg APIs handle them just fine. The code
    handling this also had an (unused) code path with a use-before-init
    error, flagged by Coverity.
    
    Remove all special handling of chained sg and leave their handling
    to the regular sg APIs.
    
    Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8efcdb7814631db29f8a1faaeecbd278a4560e76
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Fri Apr 26 21:48:21 2019 +0200

    bpf, arm64: remove prefetch insn in xadd mapping
    
    commit 8968c67a82ab7501bc3b9439c3624a49b42fe54c upstream.
    
    Prefetch-with-intent-to-write is currently part of the XADD mapping in
    the AArch64 JIT and follows the kernel's implementation of atomic_add.
    This may interfere with other threads executing the LDXR/STXR loop,
    leading to potential starvation and fairness issues. Drop the optional
    prefetch instruction.
    
    Fixes: 85f68fe89832 ("bpf, arm64: implement jiting of BPF_XADD")
    Reported-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fd049ce703c38997e8fb5a2b8720eac022ba8f32
Author: Libin Yang <libin.yang@intel.com>
Date:   Sat Apr 13 21:18:12 2019 +0800

    ASoC: codec: hdac_hdmi add device_link to card device
    
    commit 01c8327667c249818d3712c3e25c7ad2aca7f389 upstream.
    
    In resume from S3, HDAC HDMI codec driver dapm event callback may be
    operated before HDMI codec driver turns on the display audio power
    domain because of the contest between display driver and hdmi codec driver.
    
    This patch adds the device_link between soc card device (consumer) and
    hdmi codec device (supplier) to make sure the sequence is always correct.
    
    Signed-off-by: Libin Yang <libin.yang@intel.com>
    Reviewed-by: Takashi Iwai <tiwai@suse.de>
    Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 519511e47f7986731e718757ee456ad558553bfe
Author: S.j. Wang <shengjiu.wang@nxp.com>
Date:   Sun Apr 28 02:24:27 2019 +0000

    ASoC: fsl_esai: Fix missing break in switch statement
    
    commit 903c220b1ece12f17c868e43f2243b8f81ff2d4c upstream.
    
    case ESAI_HCKT_EXTAL and case ESAI_HCKR_EXTAL should be
    independent of each other, so replace fall-through with break.
    
    Fixes: 43d24e76b698 ("ASoC: fsl_esai: Add ESAI CPU DAI driver")
    Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
    Acked-by: Nicolin Chen <nicoleotsuka@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 94748513d811972991e9fa3d4288c2df79876876
Author: Curtis Malainey <cujomalainey@chromium.org>
Date:   Fri May 3 12:32:14 2019 -0700

    ASoC: RT5677-SPI: Disable 16Bit SPI Transfers
    
    commit a46eb523220e242affb9a6bc9bb8efc05f4f7459 upstream.
    
    The current algorithm allows 3 types of transfers, 16bit, 32bit and
    burst. According to Realtek, 16bit transfers have a special restriction
    in that it is restricted to the memory region of
    0x18020000 ~ 0x18021000. This region is the memory location of the I2C
    registers. The current algorithm does not uphold this restriction and
    therefore fails to complete writes.
    
    Since this has been broken for some time it likely no one is using it.
    Better to simply disable the 16 bit writes. This will allow users to
    properly load firmware over SPI without data corruption.
    
    Signed-off-by: Curtis Malainey <cujomalainey@chromium.org>
    Reviewed-by: Ben Zhang <benzh@chromium.org>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit dccbcc8060c8a3da053e05f9f600f10d67a1239c
Author: Jon Hunter <jonathanh@nvidia.com>
Date:   Wed May 1 15:29:38 2019 +0100

    ASoC: max98090: Fix restore of DAPM Muxes
    
    commit ecb2795c08bc825ebd604997e5be440b060c5b18 upstream.
    
    The max98090 driver defines 3 DAPM muxes; one for the right line output
    (LINMOD Mux), one for the left headphone mixer source (MIXHPLSEL Mux)
    and one for the right headphone mixer source (MIXHPRSEL Mux). The same
    bit is used for the mux as well as the DAPM enable, and although the mux
    can be correctly configured, after playback has completed, the mux will
    be reset during the disable phase. This is preventing the state of these
    muxes from being saved and restored correctly on system reboot. Fix this
    by marking these muxes as SND_SOC_NOPM.
    
    Note this has been verified this on the Tegra124 Nyan Big which features
    the MAX98090 codec.
    
    Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b2c90ad71e00763829c21d39a9be09cd9855a03b
Author: Jeremy Soller <jeremy@system76.com>
Date:   Tue May 7 17:11:08 2019 -0400

    ALSA: hdea/realtek - Headset fixup for System76 Gazelle (gaze14)
    
    commit 80a5052db75131423b67f38b21958555d7d970e4 upstream.
    
    On the System76 Gazelle (gaze14), there is a headset microphone input
    attached to 0x1a that does not have a jack detect. In order to get it
    working, the pin configuration needs to be set correctly, and the
    ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC fixup needs to be applied. This is
    identical to the patch already applied for the System76 Darter Pro
    (darp5).
    
    Signed-off-by: Jeremy Soller <jeremy@system76.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0a1cf4fdc58b25b088cd48e465c3907b7de6dad9
Author: Kailang Yang <kailang@realtek.com>
Date:   Fri Apr 26 16:35:41 2019 +0800

    ALSA: hda/realtek - EAPD turn on later
    
    commit 607ca3bd220f4022e6f5356026b19dafc363863a upstream.
    
    Let EAPD turn on after set pin output.
    
    [ NOTE: This change is supposed to reduce the possible click noises at
      (runtime) PM resume.  The functionality should be same (i.e. the
      verbs are executed correctly) no matter which order is, so this
      should be safe to apply for all codecs -- tiwai ]
    
    Signed-off-by: Kailang Yang <kailang@realtek.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 98ffad31068d83e14ae7f168a130c12c618093ab
Author: Hui Wang <hui.wang@canonical.com>
Date:   Mon May 6 22:09:32 2019 +0800

    ALSA: hda/hdmi - Consider eld_valid when reporting jack event
    
    commit 7f641e26a6df9269cb25dd7a4b0a91d6586ed441 upstream.
    
    On the machines with AMD GPU or Nvidia GPU, we often meet this issue:
    after s3, there are 4 HDMI/DP audio devices in the gnome-sound-setting
    even there is no any monitors plugged.
    
    When this problem happens, we check the /proc/asound/cardX/eld#N.M, we
    will find the monitor_present=1, eld_valid=0.
    
    The root cause is BIOS or GPU driver makes the PRESENCE valid even no
    monitor plugged, and of course the driver will not get the valid
    eld_data subsequently.
    
    In this situation, we should not report the jack_plugged event, to do
    so, let us change the function hdmi_present_sense_via_verbs(). In this
    function, it reads the pin_sense via snd_hda_pin_sense(), after
    calling this function, the jack_dirty is 0, and before exiting
    via_verbs(), we change the shadow pin_sense according to both
    monitor_present and eld_valid, then in the snd_hda_jack_report_sync(),
    since the jack_dirty is still 0, it will report jack event according
    to this modified shadow pin_sense.
    
    After this change, the driver will not report Jack_is_plugged event
    through hdmi_present_sense_via_verbs() if monitor_present is 1 and
    eld_valid is 0.
    
    Signed-off-by: Hui Wang <hui.wang@canonical.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 787d1c606f1a1ddf89c2b7cafdda170eedf1d4f3
Author: Hui Wang <hui.wang@canonical.com>
Date:   Mon May 6 22:09:31 2019 +0800

    ALSA: hda/hdmi - Read the pin sense from register when repolling
    
    commit 8c2e6728c2bf95765b724e07d0278ae97cd1ee0d upstream.
    
    The driver will check the monitor presence when resuming from suspend,
    starting poll or interrupt triggers. In these 3 situations, the
    jack_dirty will be set to 1 first, then the hda_jack.c reads the
    pin_sense from register, after reading the register, the jack_dirty
    will be set to 0. But hdmi_repoll_work() is enabled in these 3
    situations, It will read the pin_sense a couple of times subsequently,
    since the jack_dirty is 0 now, It does not read the register anymore,
    instead it uses the shadow pin_sense which is read at the first time.
    
    It is meaningless to check the shadow pin_sense a couple of times,
    we need to read the register to check the real plugging state, so
    we set the jack_dirty to 1 in the hdmi_repoll_work().
    
    Signed-off-by: Hui Wang <hui.wang@canonical.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bc3c4c9e00b0a3eda51a43f9d1a7daf45bd7e725
Author: Wenwen Wang <wang6495@umn.edu>
Date:   Sat Apr 27 01:06:46 2019 -0500

    ALSA: usb-audio: Fix a memory leak bug
    
    commit cb5173594d50c72b7bfa14113dfc5084b4d2f726 upstream.
    
    In parse_audio_selector_unit(), the string array 'namelist' is allocated
    through kmalloc_array(), and each string pointer in this array, i.e.,
    'namelist[]', is allocated through kmalloc() in the following for loop.
    Then, a control instance 'kctl' is created by invoking snd_ctl_new1(). If
    an error occurs during the creation process, the string array 'namelist',
    including all string pointers in the array 'namelist[]', should be freed,
    before the error code ENOMEM is returned. However, the current code does
    not free 'namelist[]', resulting in memory leaks.
    
    To fix the above issue, free all string pointers 'namelist[]' in a loop.
    
    Signed-off-by: Wenwen Wang <wang6495@umn.edu>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 592b655a306b2944fdafc32e140a7c8c11290eb8
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed May 8 15:01:24 2019 +0200

    ALSA: line6: toneport: Fix broken usage of timer for delayed execution
    
    commit 7f84ff68be05ec7a5d2acf8fdc734fe5897af48f upstream.
    
    The line6 toneport driver has code for some delayed initialization,
    and this hits the kernel Oops because mutex and other sleepable
    functions are used in the timer callback.  Fix the abuse by a delayed
    work instead so that everything works gracefully.
    
    Reported-by: syzbot+a07d0142e74fdd595cfb@syzkaller.appspotmail.com
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 978e70ead670861f6092dec987197834605f9bdc
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Mon May 6 11:38:53 2019 +0300

    mmc: sdhci-pci: Fix BYT OCP setting
    
    commit 0a49a619e7e1aeb3f5f5511ca59314423c83dae2 upstream.
    
    Some time ago, a fix was done for the sdhci-acpi driver, refer
    commit 6e1c7d6103fe ("mmc: sdhci-acpi: Reduce Baytrail eMMC/SD/SDIO
    hangs"). The same issue was not expected to affect the sdhci-pci driver,
    but there have been reports to the contrary, so make the same hardware
    setting change.
    
    This patch applies to v5.0+ but before that backports will be required.
    
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 56f590e2e30ac5639522266fb1f4528afc189561
Author: Raul E Rangel <rrangel@chromium.org>
Date:   Thu May 2 13:07:14 2019 -0600

    mmc: core: Fix tag set memory leak
    
    commit 43d8dabb4074cf7f3b1404bfbaeba5aa6f3e5cfc upstream.
    
    The tag set is allocated in mmc_init_queue but never freed. This results
    in a memory leak. This change makes sure we free the tag set when the
    queue is also freed.
    
    Signed-off-by: Raul E Rangel <rrangel@chromium.org>
    Reviewed-by: Jens Axboe <axboe@kernel.dk>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Fixes: 81196976ed94 ("mmc: block: Add blk-mq support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1ea20c66648a1b476109a620373e81b99c9eef66
Author: Sowjanya Komatineni <skomatineni@nvidia.com>
Date:   Sat Mar 23 21:45:18 2019 -0700

    mmc: tegra: fix ddr signaling for non-ddr modes
    
    commit 92cd1667d579af5c3ef383680598a112da3695df upstream.
    
    ddr_signaling is set to true for DDR50 and DDR52 modes but is
    not set back to false for other modes. This programs incorrect
    host clock when mode change happens from DDR52/DDR50 to other
    SDR or HS modes like incase of mmc_retune where it switches
    from HS400 to HS DDR and then from HS DDR to HS mode and then
    to HS200.
    
    This patch fixes the ddr_signaling to set properly for non DDR
    modes.
    
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Sowjanya Komatineni <skomatineni@nvidia.com>
    Cc: stable@vger.kernel.org # v4.20 +
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4ea5e92a20b98e97991fe2d49bc9af414942efb3
Author: Eric Biggers <ebiggers@google.com>
Date:   Tue Apr 9 23:46:32 2019 -0700

    crypto: arm64/aes-neonbs - don't access already-freed walk.iv
    
    commit 4a8108b70508df0b6c4ffa4a3974dab93dcbe851 upstream.
    
    If the user-provided IV needs to be aligned to the algorithm's
    alignmask, then skcipher_walk_virt() copies the IV into a new aligned
    buffer walk.iv.  But skcipher_walk_virt() can fail afterwards, and then
    if the caller unconditionally accesses walk.iv, it's a use-after-free.
    
    xts-aes-neonbs doesn't set an alignmask, so currently it isn't affected
    by this despite unconditionally accessing walk.iv.  However this is more
    subtle than desired, and unconditionally accessing walk.iv has caused a
    real problem in other algorithms.  Thus, update xts-aes-neonbs to start
    checking the return value of skcipher_walk_virt().
    
    Fixes: 1abee99eafab ("crypto: arm64/aes - reimplement bit-sliced ARM/NEON implementation for arm64")
    Cc: <stable@vger.kernel.org> # v4.11+
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b51455e5493a3ef62ec15bfcd2258a79fcd6b58b
Author: Eric Biggers <ebiggers@google.com>
Date:   Tue Apr 9 23:46:31 2019 -0700

    crypto: arm/aes-neonbs - don't access already-freed walk.iv
    
    commit 767f015ea0b7ab9d60432ff6cd06b664fd71f50f upstream.
    
    If the user-provided IV needs to be aligned to the algorithm's
    alignmask, then skcipher_walk_virt() copies the IV into a new aligned
    buffer walk.iv.  But skcipher_walk_virt() can fail afterwards, and then
    if the caller unconditionally accesses walk.iv, it's a use-after-free.
    
    arm32 xts-aes-neonbs doesn't set an alignmask, so currently it isn't
    affected by this despite unconditionally accessing walk.iv.  However
    this is more subtle than desired, and it was actually broken prior to
    the alignmask being removed by commit cc477bf64573 ("crypto: arm/aes -
    replace bit-sliced OpenSSL NEON code").  Thus, update xts-aes-neonbs to
    start checking the return value of skcipher_walk_virt().
    
    Fixes: e4e7f10bfc40 ("ARM: add support for bit sliced AES using NEON instructions")
    Cc: <stable@vger.kernel.org> # v3.13+
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 86d478d066963ce5090013a8fcf66adf55dd2977
Author: Horia Geantă <horia.geanta@nxp.com>
Date:   Thu Apr 25 17:52:23 2019 +0300

    crypto: caam/qi2 - generate hash keys in-place
    
    commit 418cd20e4dcdca97e6f6d59e6336228dacf2e45d upstream.
    
    Commit 307244452d3d ("crypto: caam - generate hash keys in-place")
    fixed ahash implementation in caam/jr driver such that user-provided key
    buffer is not DMA mapped, since it's not guaranteed to be DMAable.
    
    Apply a similar fix for caam/qi2 driver.
    
    Cc: <stable@vger.kernel.org> # v4.20+
    Fixes: 3f16f6c9d632 ("crypto: caam/qi2 - add support for ahash algorithms")
    Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fd2830991e56f21394416e307e2ef82990245966
Author: Horia Geantă <horia.geanta@nxp.com>
Date:   Thu Apr 25 17:52:22 2019 +0300

    crypto: caam/qi2 - fix DMA mapping of stack memory
    
    commit 5965dc745287bebf7a2eba91a66f017537fa4c54 upstream.
    
    Commits c19650d6ea99 ("crypto: caam - fix DMA mapping of stack memory")
    and 65055e210884 ("crypto: caam - fix hash context DMA unmap size")
    fixed the ahash implementation in caam/jr driver such that req->result
    is not DMA-mapped (since it's not guaranteed to be DMA-able).
    
    Apply a similar fix for ahash implementation in caam/qi2 driver.
    
    Cc: <stable@vger.kernel.org> # v4.20+
    Fixes: 3f16f6c9d632 ("crypto: caam/qi2 - add support for ahash algorithms")
    Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0eaed393b4ec4d32fda43a2dbbb32530f7d6f346
Author: Horia Geantă <horia.geanta@nxp.com>
Date:   Thu Apr 25 17:52:21 2019 +0300

    crypto: caam/qi2 - fix zero-length buffer DMA mapping
    
    commit 07586d3ddf284dd7a1a6579579d8efa7296fe60f upstream.
    
    Commit 04e6d25c5bb2 ("crypto: caam - fix zero-length buffer DMA mapping")
    fixed an issue in caam/jr driver where ahash implementation was
    DMA mapping a zero-length buffer.
    
    Current commit applies a similar fix for caam/qi2 driver.
    
    Cc: <stable@vger.kernel.org> # v4.20+
    Fixes: 3f16f6c9d632 ("crypto: caam/qi2 - add support for ahash algorithms")
    Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 86add9b56835f4c8b3a3e6b7702b48c38cc3e5a7
Author: Zhang Zhijie <zhangzj@rock-chips.com>
Date:   Fri Apr 12 17:16:33 2019 +0800

    crypto: rockchip - update IV buffer to contain the next IV
    
    commit f0cfd57b43fec65761ca61d3892b983a71515f23 upstream.
    
    The Kernel Crypto API request output the next IV data to
    IV buffer for CBC implementation. So the last block data of
    ciphertext should be copid into assigned IV buffer.
    
    Reported-by: Eric Biggers <ebiggers@google.com>
    Fixes: 433cd2c617bf ("crypto: rockchip - add crypto driver for rk3288")
    Cc: <stable@vger.kernel.org> # v4.5+
    Signed-off-by: Zhang Zhijie <zhangzj@rock-chips.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8d9cdf34aaf9c572bad7f9aa93f20ad1e0a0c4ba
Author: Eric Biggers <ebiggers@google.com>
Date:   Thu Apr 18 14:43:02 2019 -0700

    crypto: gcm - fix incompatibility between "gcm" and "gcm_base"
    
    commit f699594d436960160f6d5ba84ed4a222f20d11cd upstream.
    
    GCM instances can be created by either the "gcm" template, which only
    allows choosing the block cipher, e.g. "gcm(aes)"; or by "gcm_base",
    which allows choosing the ctr and ghash implementations, e.g.
    "gcm_base(ctr(aes-generic),ghash-generic)".
    
    However, a "gcm_base" instance prevents a "gcm" instance from being
    registered using the same implementations.  Nor will the instance be
    found by lookups of "gcm".  This can be used as a denial of service.
    Moreover, "gcm_base" instances are never tested by the crypto
    self-tests, even if there are compatible "gcm" tests.
    
    The root cause of these problems is that instances of the two templates
    use different cra_names.  Therefore, fix these problems by making
    "gcm_base" instances set the same cra_name as "gcm" instances, e.g.
    "gcm(aes)" instead of "gcm_base(ctr(aes-generic),ghash-generic)".
    
    This requires extracting the block cipher name from the name of the ctr
    algorithm.  It also requires starting to verify that the algorithms are
    really ctr and ghash, not something else entirely.  But it would be
    bizarre if anyone were actually using non-gcm-compatible algorithms with
    gcm_base, so this shouldn't break anyone in practice.
    
    Fixes: d00aa19b507b ("[CRYPTO] gcm: Allow block cipher parameter")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 246ef445e015c4c9a4c34fb90cb4fae1286c7398
Author: Eric Biggers <ebiggers@google.com>
Date:   Tue Mar 12 22:12:46 2019 -0700

    crypto: arm64/gcm-aes-ce - fix no-NEON fallback code
    
    commit 580e295178402d14bbf598a5702f8e01fc59dbaa upstream.
    
    The arm64 gcm-aes-ce algorithm is failing the extra crypto self-tests
    following my patches to test the !may_use_simd() code paths, which
    previously were untested.  The problem is that in the !may_use_simd()
    case, an odd number of AES blocks can be processed within each step of
    the skcipher_walk.  However, the skcipher_walk is being done with a
    "stride" of 2 blocks and is advanced by an even number of blocks after
    each step.  This causes the encryption to produce the wrong ciphertext
    and authentication tag, and causes the decryption to incorrectly fail.
    
    Fix it by only processing an even number of blocks per step.
    
    Fixes: c2b24c36e0a3 ("crypto: arm64/aes-gcm-ce - fix scatterwalk API violation")
    Fixes: 71e52c278c54 ("crypto: arm64/aes-ce-gcm - operate on two input blocks at a time")
    Cc: <stable@vger.kernel.org> # v4.19+
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 47a9de26eb069d86cd56fecb1980abf2f726e977
Author: Eric Biggers <ebiggers@google.com>
Date:   Sun Mar 31 13:04:13 2019 -0700

    crypto: x86/crct10dif-pcl - fix use via crypto_shash_digest()
    
    commit dec3d0b1071a0f3194e66a83d26ecf4aa8c5910e upstream.
    
    The ->digest() method of crct10dif-pclmul reads the current CRC value
    from the shash_desc context.  But this value is uninitialized, causing
    crypto_shash_digest() to compute the wrong result.  Fix it.
    
    Probably this wasn't noticed before because lib/crc-t10dif.c only uses
    crypto_shash_update(), not crypto_shash_digest().  Likewise,
    crypto_shash_digest() is not yet tested by the crypto self-tests because
    those only test the ahash API which only uses shash init/update/final.
    
    Fixes: 0b95a7f85718 ("crypto: crct10dif - Glue code to cast accelerated CRCT10DIF assembly as a crypto transform")
    Cc: <stable@vger.kernel.org> # v3.11+
    Cc: Tim Chen <tim.c.chen@linux.intel.com>
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8eb6266c8eb144afe298127291ace5c4dd01e93d
Author: Eric Biggers <ebiggers@google.com>
Date:   Sun Mar 31 13:04:12 2019 -0700

    crypto: crct10dif-generic - fix use via crypto_shash_digest()
    
    commit 307508d1072979f4435416f87936f87eaeb82054 upstream.
    
    The ->digest() method of crct10dif-generic reads the current CRC value
    from the shash_desc context.  But this value is uninitialized, causing
    crypto_shash_digest() to compute the wrong result.  Fix it.
    
    Probably this wasn't noticed before because lib/crc-t10dif.c only uses
    crypto_shash_update(), not crypto_shash_digest().  Likewise,
    crypto_shash_digest() is not yet tested by the crypto self-tests because
    those only test the ahash API which only uses shash init/update/final.
    
    This bug was detected by my patches that improve testmgr to fuzz
    algorithms against their generic implementation.
    
    Fixes: 2d31e518a428 ("crypto: crct10dif - Wrap crc_t10dif function all to use crypto transform framework")
    Cc: <stable@vger.kernel.org> # v3.11+
    Cc: Tim Chen <tim.c.chen@linux.intel.com>
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 043e69dd7fefe1ebbd9da6a5e8175244e173c7ec
Author: Eric Biggers <ebiggers@google.com>
Date:   Sun Mar 31 13:04:15 2019 -0700

    crypto: skcipher - don't WARN on unprocessed data after slow walk step
    
    commit dcaca01a42cc2c425154a13412b4124293a6e11e upstream.
    
    skcipher_walk_done() assumes it's a bug if, after the "slow" path is
    executed where the next chunk of data is processed via a bounce buffer,
    the algorithm says it didn't process all bytes.  Thus it WARNs on this.
    
    However, this can happen legitimately when the message needs to be
    evenly divisible into "blocks" but isn't, and the algorithm has a
    'walksize' greater than the block size.  For example, ecb-aes-neonbs
    sets 'walksize' to 128 bytes and only supports messages evenly divisible
    into 16-byte blocks.  If, say, 17 message bytes remain but they straddle
    scatterlist elements, the skcipher_walk code will take the "slow" path
    and pass the algorithm all 17 bytes in the bounce buffer.  But the
    algorithm will only be able to process 16 bytes, triggering the WARN.
    
    Fix this by just removing the WARN_ON().  Returning -EINVAL, as the code
    already does, is the right behavior.
    
    This bug was detected by my patches that improve testmgr to fuzz
    algorithms against their generic implementation.
    
    Fixes: b286d8b1a690 ("crypto: skcipher - Add skcipher walk interface")
    Cc: <stable@vger.kernel.org> # v4.10+
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2c0f409ba69ce9e49ad8f1477aeaeda0edeed94b
Author: Daniel Axtens <dja@axtens.net>
Date:   Fri Mar 15 13:09:01 2019 +1100

    crypto: vmx - fix copy-paste error in CTR mode
    
    commit dcf7b48212c0fab7df69e84fab22d6cb7c8c0fb9 upstream.
    
    The original assembly imported from OpenSSL has two copy-paste
    errors in handling CTR mode. When dealing with a 2 or 3 block tail,
    the code branches to the CBC decryption exit path, rather than to
    the CTR exit path.
    
    This leads to corruption of the IV, which leads to subsequent blocks
    being corrupted.
    
    This can be detected with libkcapi test suite, which is available at
    https://github.com/smuellerDD/libkcapi
    
    Reported-by: Ondrej Mosnáček <omosnacek@gmail.com>
    Fixes: 5c380d623ed3 ("crypto: vmx - Add support for VMS instructions by ASM")
    Cc: stable@vger.kernel.org
    Signed-off-by: Daniel Axtens <dja@axtens.net>
    Tested-by: Michael Ellerman <mpe@ellerman.id.au>
    Tested-by: Ondrej Mosnacek <omosnacek@gmail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8d02b83b332b4eadbbae843cd4b55e7dc312bb6b
Author: Singh, Brijesh <brijesh.singh@amd.com>
Date:   Mon Apr 8 20:42:55 2019 +0000

    crypto: ccp - Do not free psp_master when PLATFORM_INIT fails
    
    commit f5a2aeb8b254c764772729a6e48d4e0c914bb56a upstream.
    
    Currently, we free the psp_master if the PLATFORM_INIT fails during the
    SEV FW probe. If psp_master is freed then driver does not invoke the PSP
    FW. As per SEV FW spec, there are several commands (PLATFORM_RESET,
    PLATFORM_STATUS, GET_ID etc) which can be executed in the UNINIT state
    We should not free the psp_master when PLATFORM_INIT fails.
    
    Fixes: 200664d5237f ("crypto: ccp: Add SEV support")
    Cc: Tom Lendacky <thomas.lendacky@amd.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Gary Hook <gary.hook@amd.com>
    Cc: stable@vger.kernel.org # 4.19.y
    Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fdcd8b3b745e5157a57dfd0d3074f7466c23478c
Author: Eric Biggers <ebiggers@google.com>
Date:   Sun Mar 31 13:04:16 2019 -0700

    crypto: chacha20poly1305 - set cra_name correctly
    
    commit 5e27f38f1f3f45a0c938299c3a34a2d2db77165a upstream.
    
    If the rfc7539 template is instantiated with specific implementations,
    e.g. "rfc7539(chacha20-generic,poly1305-generic)" rather than
    "rfc7539(chacha20,poly1305)", then the implementation names end up
    included in the instance's cra_name.  This is incorrect because it then
    prevents all users from allocating "rfc7539(chacha20,poly1305)", if the
    highest priority implementations of chacha20 and poly1305 were selected.
    Also, the self-tests aren't run on an instance allocated in this way.
    
    Fix it by setting the instance's cra_name from the underlying
    algorithms' actual cra_names, rather than from the requested names.
    This matches what other templates do.
    
    Fixes: 71ebc4d1b27d ("crypto: chacha20poly1305 - Add a ChaCha20-Poly1305 AEAD construction, RFC7539")
    Cc: <stable@vger.kernel.org> # v4.2+
    Cc: Martin Willi <martin@strongswan.org>
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Reviewed-by: Martin Willi <martin@strongswan.org>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d6d54c7c59c6a37d5504ed654e242ed2b23206c9
Author: Eric Biggers <ebiggers@google.com>
Date:   Tue Mar 12 22:12:45 2019 -0700

    crypto: chacha-generic - fix use as arm64 no-NEON fallback
    
    commit 7aceaaef04eaaf6019ca159bc354d800559bba1d upstream.
    
    The arm64 implementations of ChaCha and XChaCha are failing the extra
    crypto self-tests following my patches to test the !may_use_simd() code
    paths, which previously were untested.  The problem is as follows:
    
    When !may_use_simd(), the arm64 NEON implementations fall back to the
    generic implementation, which uses the skcipher_walk API to iterate
    through the src/dst scatterlists.  Due to how the skcipher_walk API
    works, walk.stride is set from the skcipher_alg actually being used,
    which in this case is the arm64 NEON algorithm.  Thus walk.stride is
    5*CHACHA_BLOCK_SIZE, not CHACHA_BLOCK_SIZE.
    
    This unnecessarily large stride shouldn't cause an actual problem.
    However, the generic implementation computes round_down(nbytes,
    walk.stride).  round_down() assumes the round amount is a power of 2,
    which 5*CHACHA_BLOCK_SIZE is not, so it gives the wrong result.
    
    This causes the following case in skcipher_walk_done() to be hit,
    causing a WARN() and failing the encryption operation:
    
            if (WARN_ON(err)) {
                    /* unexpected case; didn't process all bytes */
                    err = -EINVAL;
                    goto finish;
            }
    
    Fix it by rounding down to CHACHA_BLOCK_SIZE instead of walk.stride.
    
    (Or we could replace round_down() with rounddown(), but that would add a
    slow division operation every time, which I think we should avoid.)
    
    Fixes: 2fe55987b262 ("crypto: arm64/chacha - use combined SIMD/ALU routine for more speed")
    Cc: <stable@vger.kernel.org> # v5.0+
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0a348941ad06718d08cbcc9c6fd4cf7758b47588
Author: Eric Biggers <ebiggers@google.com>
Date:   Tue Apr 9 23:46:29 2019 -0700

    crypto: lrw - don't access already-freed walk.iv
    
    commit aec286cd36eacfd797e3d5dab8d5d23c15d1bb5e upstream.
    
    If the user-provided IV needs to be aligned to the algorithm's
    alignmask, then skcipher_walk_virt() copies the IV into a new aligned
    buffer walk.iv.  But skcipher_walk_virt() can fail afterwards, and then
    if the caller unconditionally accesses walk.iv, it's a use-after-free.
    
    Fix this in the LRW template by checking the return value of
    skcipher_walk_virt().
    
    This bug was detected by my patches that improve testmgr to fuzz
    algorithms against their generic implementation.  When the extra
    self-tests were run on a KASAN-enabled kernel, a KASAN use-after-free
    splat occured during lrw(aes) testing.
    
    Fixes: c778f96bf347 ("crypto: lrw - Optimize tweak computation")
    Cc: <stable@vger.kernel.org> # v4.20+
    Cc: Ondrej Mosnacek <omosnace@redhat.com>
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 25f1509c739f28aea0278e1eed9431052f208540
Author: Eric Biggers <ebiggers@google.com>
Date:   Tue Apr 9 23:46:30 2019 -0700

    crypto: salsa20 - don't access already-freed walk.iv
    
    commit edaf28e996af69222b2cb40455dbb5459c2b875a upstream.
    
    If the user-provided IV needs to be aligned to the algorithm's
    alignmask, then skcipher_walk_virt() copies the IV into a new aligned
    buffer walk.iv.  But skcipher_walk_virt() can fail afterwards, and then
    if the caller unconditionally accesses walk.iv, it's a use-after-free.
    
    salsa20-generic doesn't set an alignmask, so currently it isn't affected
    by this despite unconditionally accessing walk.iv.  However this is more
    subtle than desired, and it was actually broken prior to the alignmask
    being removed by commit b62b3db76f73 ("crypto: salsa20-generic - cleanup
    and convert to skcipher API").
    
    Since salsa20-generic does not update the IV and does not need any IV
    alignment, update it to use req->iv instead of walk.iv.
    
    Fixes: 2407d60872dd ("[CRYPTO] salsa20: Salsa20 stream cipher")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fb7261b31a2ceb282aa7bc4536816d324e6db48b
Author: Christian Lamparter <chunkeey@gmail.com>
Date:   Mon Apr 22 13:25:59 2019 +0200

    crypto: crypto4xx - fix cfb and ofb "overran dst buffer" issues
    
    commit 7e92e1717e3eaf6b322c252947c696b3059f05be upstream.
    
    Currently, crypto4xx CFB and OFB AES ciphers are
    failing testmgr's test vectors.
    
    |cfb-aes-ppc4xx encryption overran dst buffer on test vector 3, cfg="in-place"
    |ofb-aes-ppc4xx encryption overran dst buffer on test vector 1, cfg="in-place"
    
    This is because of a very subtile "bug" in the hardware that
    gets indirectly mentioned in 18.1.3.5 Encryption/Decryption
    of the hardware spec:
    
    the OFB and CFB modes for AES are listed there as operation
    modes for >>> "Block ciphers" <<<. Which kind of makes sense,
    but we would like them to be considered as stream ciphers just
    like the CTR mode.
    
    To workaround this issue and stop the hardware from causing
    "overran dst buffer" on crypttexts that are not a multiple
    of 16 (AES_BLOCK_SIZE), we force the driver to use the scatter
    buffers as the go-between.
    
    As a bonus this patch also kills redundant pd_uinfo->num_gd
    and pd_uinfo->num_sd setters since the value has already been
    set before.
    
    Cc: stable@vger.kernel.org
    Fixes: f2a13e7cba9e ("crypto: crypto4xx - enable AES RFC3686, ECB, CFB and OFB offloads")
    Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3149ac3ef4e68253290a36a23cb9726c19a341dc
Author: Christian Lamparter <chunkeey@gmail.com>
Date:   Mon Apr 22 13:25:58 2019 +0200

    crypto: crypto4xx - fix ctr-aes missing output IV
    
    commit 25baaf8e2c93197d063b372ef7b62f2767c7ac0b upstream.
    
    Commit 8efd972ef96a ("crypto: testmgr - support checking skcipher output IV")
    caused the crypto4xx driver to produce the following error:
    
    | ctr-aes-ppc4xx encryption test failed (wrong output IV)
    | on test vector 0, cfg="in-place"
    
    This patch fixes this by reworking the crypto4xx_setkey_aes()
    function to:
    
     - not save the iv for ECB (as per 18.2.38 CRYP0_SA_CMD_0:
       "This bit mut be cleared for DES ECB mode or AES ECB mode,
       when no IV is used.")
    
     - instruct the hardware to save the generated IV for all
       other modes of operations that have IV and then supply
       it back to the callee in pretty much the same way as we
       do it for cbc-aes already.
    
     - make it clear that the DIR_(IN|OUT)BOUND is the important
       bit that tells the hardware to encrypt or decrypt the data.
       (this is cosmetic - but it hopefully prevents me from
        getting confused again).
    
     - don't load any bogus hash when we don't use any hash
       operation to begin with.
    
    Cc: stable@vger.kernel.org
    Fixes: f2a13e7cba9e ("crypto: crypto4xx - enable AES RFC3686, ECB, CFB and OFB offloads")
    Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5404a6ff7458d2d3f2045a26a023da16e96ef979
Author: Yazen Ghannam <yazen.ghannam@amd.com>
Date:   Mon Mar 25 16:34:22 2019 +0000

    x86/MCE/AMD: Don't report L1 BTB MCA errors on some family 17h models
    
    commit 71a84402b93e5fbd8f817f40059c137e10171788 upstream.
    
    AMD family 17h Models 10h-2Fh may report a high number of L1 BTB MCA
    errors under certain conditions. The errors are benign and can safely be
    ignored. However, the high error rate may cause the MCA threshold
    counter to overflow causing a high rate of thresholding interrupts.
    
    In addition, users may see the errors reported through the AMD MCE
    decoder module, even with the interrupt disabled, due to MCA polling.
    
    Clear the "Counter Present" bit in the Instruction Fetch bank's
    MCA_MISC0 register. This will prevent enabling MCA thresholding on this
    bank which will prevent the high interrupt rate due to this error.
    
    Define an AMD-specific function to filter these errors from the MCE
    event pool so that they don't get reported during early boot.
    
    Rename filter function in EDAC/mce_amd to avoid a naming conflict, while
    at it.
    
     [ bp: Move function prototype to the internal header and
       massage/cleanup, fix typos. ]
    
    Reported-by: Rafał Miłecki <rafal@milecki.pl>
    Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: "clemej@gmail.com" <clemej@gmail.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
    Cc: Pu Wen <puwen@hygon.cn>
    Cc: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Cc: Shirish S <Shirish.S@amd.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: linux-edac <linux-edac@vger.kernel.org>
    Cc: x86-ml <x86@kernel.org>
    Cc: <stable@vger.kernel.org> # 5.0.x: c95b323dcd35: x86/MCE/AMD: Turn off MC4_MISC thresholding on all family 0x15 models
    Cc: <stable@vger.kernel.org> # 5.0.x: 30aa3d26edb0: x86/MCE/AMD: Carve out the MC4_MISC thresholding quirk
    Cc: <stable@vger.kernel.org> # 5.0.x: 9308fd407455: x86/MCE: Group AMD function prototypes in <asm/mce.h>
    Cc: <stable@vger.kernel.org> # 5.0.x
    Link: https://lkml.kernel.org/r/20190325163410.171021-2-Yazen.Ghannam@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ad09c6ef2dcb90e6044f05ce45361df81f929978
Author: Yazen Ghannam <yazen.ghannam@amd.com>
Date:   Fri Mar 22 20:29:00 2019 +0000

    x86/MCE: Group AMD function prototypes in <asm/mce.h>
    
    commit 9308fd4074551f222f30322d1ee8c5aff18e9747 upstream.
    
    There are two groups of "ifdef CONFIG_X86_MCE_AMD" function prototypes
    in <asm/mce.h>. Merge these two groups.
    
    No functional change.
    
     [ bp: align vertically. ]
    
    Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: "clemej@gmail.com" <clemej@gmail.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Pu Wen <puwen@hygon.cn>
    Cc: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Cc: "rafal@milecki.pl" <rafal@milecki.pl>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: x86-ml <x86@kernel.org>
    Link: https://lkml.kernel.org/r/20190322202848.20749-3-Yazen.Ghannam@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b05237350b4acdcb762640d4f1f8b8b067c86aef
Author: Shirish S <Shirish.S@amd.com>
Date:   Wed Jan 16 15:10:40 2019 +0000

    x86/MCE/AMD: Carve out the MC4_MISC thresholding quirk
    
    commit 30aa3d26edb0f3d7992757287eec0ca588a5c259 upstream.
    
    The MC4_MISC thresholding quirk needs to be applied during S5 -> S0 and
    S3 -> S0 state transitions, which follow different code paths. Carve it
    out into a separate function and call it mce_amd_feature_init() where
    the two code paths of the state transitions converge.
    
     [ bp: massage commit message and the carved out function. ]
    
    Signed-off-by: Shirish S <shirish.s@amd.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: Yazen Ghannam <yazen.ghannam@amd.com>
    Cc: x86-ml <x86@kernel.org>
    Link: https://lkml.kernel.org/r/1547651417-23583-3-git-send-email-shirish.s@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e6b8b66f965e9ecc76662d7888c4fbc5df4976b7
Author: Shirish S <Shirish.S@amd.com>
Date:   Thu Jan 10 07:54:40 2019 +0000

    x86/MCE/AMD: Turn off MC4_MISC thresholding on all family 0x15 models
    
    commit c95b323dcd3598dd7ef5005d6723c1ba3b801093 upstream.
    
    MC4_MISC thresholding is not supported on all family 0x15 processors,
    hence skip the x86_model check when applying the quirk.
    
     [ bp: massage commit message. ]
    
    Signed-off-by: Shirish S <shirish.s@amd.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: x86-ml <x86@kernel.org>
    Link: https://lkml.kernel.org/r/1547106849-3476-2-git-send-email-shirish.s@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 993a6595b253a4270ae592e3c8c09099be469c05
Author: Yazen Ghannam <yazen.ghannam@amd.com>
Date:   Mon Mar 25 16:34:22 2019 +0000

    x86/MCE: Add an MCE-record filtering function
    
    commit 45d4b7b9cb88526f6d5bd4c03efab88d75d10e4f upstream.
    
    Some systems may report spurious MCA errors. In general, spurious MCA
    errors may be disabled by clearing a particular bit in MCA_CTL. However,
    clearing a bit in MCA_CTL may not be recommended for some errors, so the
    only option is to ignore them.
    
    An MCA error is printed and handled after it has been added to the MCE
    event pool. So an MCA error can be ignored by not adding it to that pool
    in the first place.
    
    Add such a filtering function.
    
     [ bp: Move function prototype to the internal header and massage. ]
    
    Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: "clemej@gmail.com" <clemej@gmail.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Pu Wen <puwen@hygon.cn>
    Cc: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Cc: "rafal@milecki.pl" <rafal@milecki.pl>
    Cc: Shirish S <Shirish.S@amd.com>
    Cc: <stable@vger.kernel.org> # 5.0.x
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: x86-ml <x86@kernel.org>
    Link: https://lkml.kernel.org/r/20190325163410.171021-1-Yazen.Ghannam@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 52176123f9cb8f81e56e7e10929d9ef03dabcdc9
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Thu Feb 14 10:30:52 2019 +0100

    sched/x86: Save [ER]FLAGS on context switch
    
    commit 6690e86be83ac75832e461c141055b5d601c0a6d upstream.
    
    Effectively reverts commit:
    
      2c7577a75837 ("sched/x86_64: Don't save flags on context switch")
    
    Specifically because SMAP uses FLAGS.AC which invalidates the claim
    that the kernel has clean flags.
    
    In particular; while preemption from interrupt return is fine (the
    IRET frame on the exception stack contains FLAGS) it breaks any code
    that does synchonous scheduling, including preempt_enable().
    
    This has become a significant issue ever since commit:
    
      5b24a7a2aa20 ("Add 'unsafe' user access functions for batched accesses")
    
    provided for means of having 'normal' C code between STAC / CLAC,
    exposing the FLAGS.AC state. So far this hasn't led to trouble,
    however fix it before it comes apart.
    
    Reported-by: Julien Thierry <julien.thierry@arm.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@kernel.org
    Fixes: 5b24a7a2aa20 ("Add 'unsafe' user access functions for batched accesses")
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d81b4ae57fe9756e43f627d67030ea56686c3c6c
Author: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
Date:   Mon Apr 8 18:17:19 2019 +0100

    arm64: Save and restore OSDLR_EL1 across suspend/resume
    
    commit 827a108e354db633698f0b4a10c1ffd2b1f8d1d0 upstream.
    
    When the CPU comes out of suspend, the firmware may have modified the OS
    Double Lock Register. Save it in an unused slot of cpu_suspend_ctx, and
    restore it on resume.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bd254f9d1157194586d1b535387e377306149d7b
Author: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
Date:   Mon Apr 8 18:17:18 2019 +0100

    arm64: Clear OSDLR_EL1 on CPU boot
    
    commit 6fda41bf12615ee7c3ddac88155099b1a8cf8d00 upstream.
    
    Some firmwares may reboot CPUs with OS Double Lock set. Make sure that
    it is unlocked, in order to use debug exceptions.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a184f8889306afd955924b36625216ad2fa13531
Author: Vincenzo Frascino <vincenzo.frascino@arm.com>
Date:   Mon Apr 1 12:30:14 2019 +0100

    arm64: compat: Reduce address limit
    
    commit d263119387de9975d2acba1dfd3392f7c5979c18 upstream.
    
    Currently, compat tasks running on arm64 can allocate memory up to
    TASK_SIZE_32 (UL(0x100000000)).
    
    This means that mmap() allocations, if we treat them as returning an
    array, are not compliant with the sections 6.5.8 of the C standard
    (C99) which states that: "If the expression P points to an element of
    an array object and the expression Q points to the last element of the
    same array object, the pointer expression Q+1 compares greater than P".
    
    Redefine TASK_SIZE_32 to address the issue.
    
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Jann Horn <jannh@google.com>
    Cc: <stable@vger.kernel.org>
    Reported-by: Jann Horn <jannh@google.com>
    Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
    [will: fixed typo in comment]
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e57320e0177a27634263aa020b7ede884b7f72b8
Author: Will Deacon <will.deacon@arm.com>
Date:   Mon Apr 29 17:26:22 2019 +0100

    arm64: arch_timer: Ensure counter register reads occur with seqlock held
    
    commit 75a19a0202db21638a1c2b424afb867e1f9a2376 upstream.
    
    When executing clock_gettime(), either in the vDSO or via a system call,
    we need to ensure that the read of the counter register occurs within
    the seqlock reader critical section. This ensures that updates to the
    clocksource parameters (e.g. the multiplier) are consistent with the
    counter value and therefore avoids the situation where time appears to
    go backwards across multiple reads.
    
    Extend the vDSO logic so that the seqlock critical section covers the
    read of the counter register as well as accesses to the data page. Since
    reads of the counter system registers are not ordered by memory barrier
    instructions, introduce dependency ordering from the counter read to a
    subsequent memory access so that the seqlock memory barriers apply to
    the counter access in both the vDSO and the system call paths.
    
    Cc: <stable@vger.kernel.org>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Tested-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
    Link: https://lore.kernel.org/linux-arm-kernel/alpine.DEB.2.21.1902081950260.1662@nanos.tec.linutronix.de/
    Reported-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 32e802d947ca415b11d27c4adda63044ff184100
Author: Boyang Zhou <zhouby_cn@126.com>
Date:   Mon Apr 29 15:27:19 2019 +0100

    arm64: mmap: Ensure file offset is treated as unsigned
    
    commit f08cae2f28db24d95be5204046b60618d8de4ddc upstream.
    
    The file offset argument to the arm64 sys_mmap() implementation is
    scaled from bytes to pages by shifting right by PAGE_SHIFT.
    Unfortunately, the offset is passed in as a signed 'off_t' type and
    therefore large offsets (i.e. with the top bit set) are incorrectly
    sign-extended by the shift. This has been observed to cause false mmap()
    failures when mapping GPU doorbells on an arm64 server part.
    
    Change the type of the file offset argument to sys_mmap() from 'off_t'
    to 'unsigned long' so that the shifting scales the value as expected.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Boyang Zhou <zhouby_cn@126.com>
    [will: rewrote commit message]
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 38a6f722c01a24de7a84b13775c00f291fc47e79
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Mon Apr 22 22:43:01 2019 +0200

    power: supply: axp288_fuel_gauge: Add ACEPC T8 and T11 mini PCs to the blacklist
    
    commit 9274c78305e12c5f461bec15f49c38e0f32ca705 upstream.
    
    The ACEPC T8 and T11 Cherry Trail Z8350 mini PCs use an AXP288 and as PCs,
    rather then portables, they does not have a battery. Still for some
    reason the AXP288 not only thinks there is a battery, it actually
    thinks it is discharging while the PC is running, slowly going to
    0% full, causing userspace to shutdown the system due to the battery
    being critically low after a while.
    
    This commit adds the ACEPC T8 and T11 to the axp288 fuel-gauge driver
    blacklist, so that we stop reporting bogus battery readings on this device.
    
    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1690852
    Cc: stable@vger.kernel.org
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a4e41f047a3e3a4ddbb386203e85926ef581ef7b
Author: Gustavo A. R. Silva <gustavo@embeddedor.com>
Date:   Mon Mar 18 11:14:39 2019 -0500

    power: supply: axp288_charger: Fix unchecked return value
    
    commit c3422ad5f84a66739ec6a37251ca27638c85b6be upstream.
    
    Currently there is no check on platform_get_irq() return value
    in case it fails, hence never actually reporting any errors and
    causing unexpected behavior when using such value as argument
    for function regmap_irq_get_virq().
    
    Fix this by adding a proper check, a message reporting any errors
    and returning *pirq*
    
    Addresses-Coverity-ID: 1443940 ("Improper use of negative value")
    Fixes: 843735b788a4 ("power: axp288_charger: axp288 charger driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fe3f22b7084da08bd601fcac2a224eeb59749cca
Author: Wen Yang <wen.yang99@zte.com.cn>
Date:   Tue Mar 5 19:33:54 2019 +0800

    ARM: exynos: Fix a leaked reference by adding missing of_node_put
    
    commit 629266bf7229cd6a550075f5961f95607b823b59 upstream.
    
    The call to of_get_next_child returns a node pointer with refcount
    incremented thus it must be explicitly decremented after the last
    usage.
    
    Detected by coccinelle with warnings like:
        arch/arm/mach-exynos/firmware.c:201:2-8: ERROR: missing of_node_put;
            acquired a node pointer with refcount incremented on line 193,
            but without a corresponding object release within this function.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Wen Yang <wen.yang99@zte.com.cn>
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a6bc3bfb82066f130c23f9b677c5bf3a27f150d5
Author: Christoph Muellner <christoph.muellner@theobroma-systems.com>
Date:   Fri Mar 22 12:38:05 2019 +0100

    mmc: sdhci-of-arasan: Add DTS property to disable DCMDs.
    
    commit 7bda9482e7ed4d27d83c1f9cb5cbe3b34ddac3e8 upstream.
    
    Direct commands (DCMDs) are an optional feature of eMMC 5.1's command
    queue engine (CQE). The Arasan eMMC 5.1 controller uses the CQHCI,
    which exposes a control register bit to enable the feature.
    The current implementation sets this bit unconditionally.
    
    This patch allows to suppress the feature activation,
    by specifying the property disable-cqe-dcmd.
    
    Signed-off-by: Christoph Muellner <christoph.muellner@theobroma-systems.com>
    Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Fixes: 84362d79f436 ("mmc: sdhci-of-arasan: Add CQHCI support for arasan,sdhci-5.1")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bf6cb21717f404260b1d259df827ae32a90e49e1
Author: Sylwester Nawrocki <s.nawrocki@samsung.com>
Date:   Wed Mar 20 10:59:50 2019 +0100

    ARM: dts: exynos: Fix audio (microphone) routing on Odroid XU3
    
    commit 9b23e1a3e8fde76e8cc0e366ab1ed4ffb4440feb upstream.
    
    The name of CODEC input widget to which microphone is connected through
    the "Headphone" jack is "IN12" not "IN1". This fixes microphone support
    on Odroid XU3.
    
    Cc: <stable@vger.kernel.org> # v4.14+
    Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit de42e519cbee45e3565fb0c7889561bcabcd75e5
Author: Stuart Menefy <stuart.menefy@mathembedded.com>
Date:   Tue Feb 19 13:03:37 2019 +0000

    ARM: dts: exynos: Fix interrupt for shared EINTs on Exynos5260
    
    commit b7ed69d67ff0788d8463e599dd5dd1b45c701a7e upstream.
    
    Fix the interrupt information for the GPIO lines with a shared EINT
    interrupt.
    
    Fixes: 16d7ff2642e7 ("ARM: dts: add dts files for exynos5260 SoC")
    Cc: stable@vger.kernel.org
    Signed-off-by: Stuart Menefy <stuart.menefy@mathembedded.com>
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3ea393bb1ca45119ceb67c6be76ea3e71c11cb8b
Author: Christian Lamparter <chunkeey@gmail.com>
Date:   Tue Feb 26 01:12:01 2019 +0100

    ARM: dts: qcom: ipq4019: enlarge PCIe BAR range
    
    commit f3e35357cd460a8aeb48b8113dc4b761a7d5c828 upstream.
    
    David Bauer reported that the VDSL modem (attached via PCIe)
    on his AVM Fritz!Box 7530 was complaining about not having
    enough space in the BAR. A closer inspection of the old
    qcom-ipq40xx.dtsi pulled from the GL-iNet repository listed:
    
    | qcom,pcie@80000 {
    |       compatible = "qcom,msm_pcie";
    |       reg = <0x80000 0x2000>,
    |             <0x99000 0x800>,
    |             <0x40000000 0xf1d>,
    |             <0x40000f20 0xa8>,
    |             <0x40100000 0x1000>,
    |             <0x40200000 0x100000>,
    |             <0x40300000 0xd00000>;
    |       reg-names = "parf", "phy", "dm_core", "elbi",
    |                       "conf", "io", "bars";
    
    Matching the reg-names with the listed reg leads to
    <0xd00000> as the size for the "bars".
    
    Cc: stable@vger.kernel.org
    BugLink: https://www.mail-archive.com/openwrt-devel@lists.openwrt.org/msg45212.html
    Reported-by: David Bauer <mail@david-bauer.net>
    Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
    Signed-off-by: Andy Gross <agross@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5d6fa0370c517fce14ee02a4e2446a5b6366c26c
Author: Christoph Muellner <christoph.muellner@theobroma-systems.com>
Date:   Fri Mar 22 12:38:06 2019 +0100

    arm64: dts: rockchip: Disable DCMDs on RK3399's eMMC controller.
    
    commit a3eec13b8fd2b9791a21fa16e38dfea8111579bf upstream.
    
    When using direct commands (DCMDs) on an RK3399, we get spurious
    CQE completion interrupts for the DCMD transaction slot (#31):
    
    [  931.196520] ------------[ cut here ]------------
    [  931.201702] mmc1: cqhci: spurious TCN for tag 31
    [  931.206906] WARNING: CPU: 0 PID: 1433 at /usr/src/kernel/drivers/mmc/host/cqhci.c:725 cqhci_irq+0x2e4/0x490
    [  931.206909] Modules linked in:
    [  931.206918] CPU: 0 PID: 1433 Comm: irq/29-mmc1 Not tainted 4.19.8-rt6-funkadelic #1
    [  931.206920] Hardware name: Theobroma Systems RK3399-Q7 SoM (DT)
    [  931.206924] pstate: 40000005 (nZcv daif -PAN -UAO)
    [  931.206927] pc : cqhci_irq+0x2e4/0x490
    [  931.206931] lr : cqhci_irq+0x2e4/0x490
    [  931.206933] sp : ffff00000e54bc80
    [  931.206934] x29: ffff00000e54bc80 x28: 0000000000000000
    [  931.206939] x27: 0000000000000001 x26: ffff000008f217e8
    [  931.206944] x25: ffff8000f02ef030 x24: ffff0000091417b0
    [  931.206948] x23: ffff0000090aa000 x22: ffff8000f008b000
    [  931.206953] x21: 0000000000000002 x20: 000000000000001f
    [  931.206957] x19: ffff8000f02ef018 x18: ffffffffffffffff
    [  931.206961] x17: 0000000000000000 x16: 0000000000000000
    [  931.206966] x15: ffff0000090aa6c8 x14: 0720072007200720
    [  931.206970] x13: 0720072007200720 x12: 0720072007200720
    [  931.206975] x11: 0720072007200720 x10: 0720072007200720
    [  931.206980] x9 : 0720072007200720 x8 : 0720072007200720
    [  931.206984] x7 : 0720073107330720 x6 : 00000000000005a0
    [  931.206988] x5 : ffff00000860d4b0 x4 : 0000000000000000
    [  931.206993] x3 : 0000000000000001 x2 : 0000000000000001
    [  931.206997] x1 : 1bde3a91b0d4d900 x0 : 0000000000000000
    [  931.207001] Call trace:
    [  931.207005]  cqhci_irq+0x2e4/0x490
    [  931.207009]  sdhci_arasan_cqhci_irq+0x5c/0x90
    [  931.207013]  sdhci_irq+0x98/0x930
    [  931.207019]  irq_forced_thread_fn+0x2c/0xa0
    [  931.207023]  irq_thread+0x114/0x1c0
    [  931.207027]  kthread+0x128/0x130
    [  931.207032]  ret_from_fork+0x10/0x20
    [  931.207035] ---[ end trace 0000000000000002 ]---
    
    The driver shows this message only for the first spurious interrupt
    by using WARN_ONCE(). Changing this to WARN() shows, that this is
    happening quite frequently (up to once a second).
    
    Since the eMMC 5.1 specification, where CQE and CQHCI are specified,
    does not mention that spurious TCN interrupts for DCMDs can be simply
    ignored, we must assume that using this feature is not working reliably.
    
    The current implementation uses DCMD for REQ_OP_FLUSH only, and
    I could not see any performance/power impact when disabling
    this optional feature for RK3399.
    
    Therefore this patch disables DCMDs for RK3399.
    
    Signed-off-by: Christoph Muellner <christoph.muellner@theobroma-systems.com>
    Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
    Fixes: 84362d79f436 ("mmc: sdhci-of-arasan: Add CQHCI support for arasan,sdhci-5.1")
    Cc: stable@vger.kernel.org
    [the corresponding code changes are queued for 5.2 so doing that as well]
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5414a4761988dcce24b33dd1f30a77e20267908f
Author: Katsuhiro Suzuki <katsuhiro@katsuster.net>
Date:   Wed Mar 27 21:03:17 2019 +0900

    arm64: dts: rockchip: fix IO domain voltage setting of APIO5 on rockpro64
    
    commit 798689e45190756c2eca6656ee4c624370a5012a upstream.
    
    This patch fixes IO domain voltage setting that is related to
    audio_gpio3d4a_ms (bit 1) of GRF_IO_VSEL.
    
    This is because RockPro64 schematics P.16 says that regulator
    supplies 3.0V power to APIO5_VDD. So audio_gpio3d4a_ms bit should
    be clear (means 3.0V). Power domain map is saying different thing
    (supplies 1.8V) but I believe P.16 is actual connectings.
    
    Fixes: e4f3fb490967 ("arm64: dts: rockchip: add initial dts support for Rockpro64")
    Cc: stable@vger.kernel.org
    Suggested-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Katsuhiro Suzuki <katsuhiro@katsuster.net>
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8c1134ff70df5988b0338defa319a6c8c9d87647
Author: Josh Poimboeuf <jpoimboe@redhat.com>
Date:   Mon May 13 12:01:32 2019 -0500

    objtool: Fix function fallthrough detection
    
    commit e6f393bc939d566ce3def71232d8013de9aaadde upstream.
    
    When a function falls through to the next function due to a compiler
    bug, objtool prints some obscure warnings.  For example:
    
      drivers/regulator/core.o: warning: objtool: regulator_count_voltages()+0x95: return with modified stack frame
      drivers/regulator/core.o: warning: objtool: regulator_count_voltages()+0x0: stack state mismatch: cfa1=7+32 cfa2=7+8
    
    Instead it should be printing:
    
      drivers/regulator/core.o: warning: objtool: regulator_supply_is_couple() falls through to next function regulator_count_voltages()
    
    This used to work, but was broken by the following commit:
    
      13810435b9a7 ("objtool: Support GCC 8's cold subfunctions")
    
    The padding nops at the end of a function aren't actually part of the
    function, as defined by the symbol table.  So the 'func' variable in
    validate_branch() is getting cleared to NULL when a padding nop is
    encountered, breaking the fallthrough detection.
    
    If the current instruction doesn't have a function associated with it,
    just consider it to be part of the previously detected function by not
    overwriting the previous value of 'func'.
    
    Reported-by: kbuild test robot <lkp@intel.com>
    Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: <stable@vger.kernel.org>
    Fixes: 13810435b9a7 ("objtool: Support GCC 8's cold subfunctions")
    Link: http://lkml.kernel.org/r/546d143820cd08a46624ae8440d093dd6c902cae.1557766718.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bc19bb7d8d104da77d4d7c0513d25bf3c23b86fc
Author: Andy Lutomirski <luto@kernel.org>
Date:   Tue May 14 13:24:40 2019 -0700

    x86/speculation/mds: Improve CPU buffer clear documentation
    
    commit 9d8d0294e78a164d407133dea05caf4b84247d6a upstream.
    
    On x86_64, all returns to usermode go through
    prepare_exit_to_usermode(), with the sole exception of do_nmi().
    This even includes machine checks -- this was added several years
    ago to support MCE recovery.  Update the documentation.
    
    Signed-off-by: Andy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Frederic Weisbecker <frederic@kernel.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Jon Masters <jcm@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Fixes: 04dcbdb80578 ("x86/speculation/mds: Clear CPU buffers on exit to user")
    Link: http://lkml.kernel.org/r/999fa9e126ba6a48e9d214d2f18dbde5c62ac55c.1557865329.git.luto@kernel.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d2214ccfecb58af2bd20cd34189814434d58b926
Author: Andy Lutomirski <luto@kernel.org>
Date:   Tue May 14 13:24:39 2019 -0700

    x86/speculation/mds: Revert CPU buffer clear on double fault exit
    
    commit 88640e1dcd089879530a49a8d212d1814678dfe7 upstream.
    
    The double fault ESPFIX path doesn't return to user mode at all --
    it returns back to the kernel by simulating a #GP fault.
    prepare_exit_to_usermode() will run on the way out of
    general_protection before running user code.
    
    Signed-off-by: Andy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Frederic Weisbecker <frederic@kernel.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Jon Masters <jcm@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Fixes: 04dcbdb80578 ("x86/speculation/mds: Clear CPU buffers on exit to user")
    Link: http://lkml.kernel.org/r/ac97612445c0a44ee10374f6ea79c222fe22a5c4.1557865329.git.luto@kernel.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bfcac787225288ecada8c4d8c2f6f28bd08097cd
Author: Waiman Long <longman@redhat.com>
Date:   Sun Apr 28 17:25:38 2019 -0400

    locking/rwsem: Prevent decrement of reader count before increment
    
    [ Upstream commit a9e9bcb45b1525ba7aea26ed9441e8632aeeda58 ]
    
    During my rwsem testing, it was found that after a down_read(), the
    reader count may occasionally become 0 or even negative. Consequently,
    a writer may steal the lock at that time and execute with the reader
    in parallel thus breaking the mutual exclusion guarantee of the write
    lock. In other words, both readers and writer can become rwsem owners
    simultaneously.
    
    The current reader wakeup code does it in one pass to clear waiter->task
    and put them into wake_q before fully incrementing the reader count.
    Once waiter->task is cleared, the corresponding reader may see it,
    finish the critical section and do unlock to decrement the count before
    the count is incremented. This is not a problem if there is only one
    reader to wake up as the count has been pre-incremented by 1.  It is
    a problem if there are more than one readers to be woken up and writer
    can steal the lock.
    
    The wakeup was actually done in 2 passes before the following v4.9 commit:
    
      70800c3c0cc5 ("locking/rwsem: Scan the wait_list for readers only once")
    
    To fix this problem, the wakeup is now done in two passes
    again. In the first pass, we collect the readers and count them.
    The reader count is then fully incremented. In the second pass, the
    waiter->task is then cleared and they are put into wake_q to be woken
    up later.
    
    Signed-off-by: Waiman Long <longman@redhat.com>
    Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tim Chen <tim.c.chen@linux.intel.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: huang ying <huang.ying.caritas@gmail.com>
    Fixes: 70800c3c0cc5 ("locking/rwsem: Scan the wait_list for readers only once")
    Link: http://lkml.kernel.org/r/20190428212557.13482-2-longman@redhat.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>