commit 8773f9bfa9e82c9311a58e82dcfc4f3470946a12
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Mar 8 22:41:27 2018 -0800

    Linux 4.14.25

commit df11c2268c39f6885a9b2caef02a8aac588abb19
Author: Sagi Grimberg <sagi@grimberg.me>
Date:   Thu Nov 23 17:35:21 2017 +0200

    nvme-rdma: don't suppress send completions
    
    commit b4b591c87f2b0f4ebaf3a68d4f13873b241aa584 upstream.
    
    The entire completions suppress mechanism is currently broken because the
    HCA might retry a send operation (due to dropped ack) after the nvme
    transaction has completed.
    
    In order to handle this, we signal all send completions and introduce a
    separate done handler for async events as they will be handled differently
    (as they don't include in-capsule data by definition).
    
    Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
    Reviewed-by: Max Gurtovoy <maxg@mellanox.com>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9474d8fa7ac486e54fbba0fd1f04f907c9a4885a
Author: NeilBrown <neilb@suse.com>
Date:   Sat Feb 3 09:19:30 2018 +1100

    md: only allow remove_and_add_spares when no sync_thread running.
    
    commit 39772f0a7be3b3dc26c74ea13fe7847fd1522c8b upstream.
    
    The locking protocols in md assume that a device will
    never be removed from an array during resync/recovery/reshape.
    When that isn't happening, rcu or reconfig_mutex is needed
    to protect an rdev pointer while taking a refcount.  When
    it is happening, that protection isn't needed.
    
    Unfortunately there are cases were remove_and_add_spares() is
    called when recovery might be happening: is state_store(),
    slot_store() and hot_remove_disk().
    In each case, this is just an optimization, to try to expedite
    removal from the personality so the device can be removed from
    the array.  If resync etc is happening, we just have to wait
    for md_check_recover to find a suitable time to call
    remove_and_add_spares().
    
    This optimization and not essential so it doesn't
    matter if it fails.
    So change remove_and_add_spares() to abort early if
    resync/recovery/reshape is happening, unless it is called
    from md_check_recovery() as part of a newly started recovery.
    The parameter "this" is only NULL when called from
    md_check_recovery() so when it is NULL, there is no need to abort.
    
    As this can result in a NULL dereference, the fix is suitable
    for -stable.
    
    cc: yuyufen <yuyufen@huawei.com>
    Cc: Tomasz Majchrzak <tomasz.majchrzak@intel.com>
    Fixes: 8430e7e0af9a ("md: disconnect device from personality before trying to remove it.")
    Cc: stable@ver.kernel.org (v4.8+)
    Signed-off-by: NeilBrown <neilb@suse.com>
    Signed-off-by: Shaohua Li <sh.li@alibaba-inc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4df591f704a2bebb0ebd7b1593208ab7169857f2
Author: Adam Ford <aford173@gmail.com>
Date:   Thu Jan 25 14:10:37 2018 -0600

    ARM: dts: LogicPD Torpedo: Fix I2C1 pinmux
    
    commit 74402055a2d3ec998a1ded599e86185a27d9bbf4 upstream.
    
    The pinmuxing was missing for I2C1 which was causing intermittent issues
    with the PMIC which is connected to I2C1.  The bootloader did not quite
    configure the I2C1 either, so when running at 2.6MHz, it was generating
    errors at time.
    
    This correctly sets the I2C1 pinmuxing so it can operate at 2.6MHz
    
    Fixes: 687c27676151 ("ARM: dts: Add minimal support for LogicPD Torpedo
    DM3730 devkit")
    
    Signed-off-by: Adam Ford <aford173@gmail.com>
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2b8446579c1bbde6310b3a9ed7f5c4b1147466e1
Author: Adam Ford <aford173@gmail.com>
Date:   Sat Jan 27 15:27:05 2018 -0600

    ARM: dts: LogicPD SOM-LV: Fix I2C1 pinmux
    
    commit 84c7efd607e7fb6933920322086db64654f669b2 upstream.
    
    The pinmuxing was missing for I2C1 which was causing intermittent issues
    with the PMIC which is connected to I2C1.  The bootloader did not quite
    configure the I2C1 either, so when running at 2.6MHz, it was generating
    errors at times.
    
    This correctly sets the I2C1 pinmuxing so it can operate at 2.6MHz
    
    Fixes: ab8dd3aed011 ("ARM: DTS: Add minimal Support for Logic PD DM3730
    SOM-LV")
    
    Signed-off-by: Adam Ford <aford173@gmail.com>
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b2190cc3918443604730dfe3c7b16f684c3ff72f
Author: Kai Heng Feng <kai.heng.feng@canonical.com>
Date:   Mon Feb 5 13:19:24 2018 +0800

    ACPI / bus: Parse tables as term_list for Dell XPS 9570 and Precision M5530
    
    commit 36904703aeeeb6cd31993f1353c8325006229f9a upstream.
    
    The i2c touchpad on Dell XPS 9570 and Precision M5530 doesn't work out
    of box.
    
    The touchpad relies on its _INI method to update its _HID value from
    XXXX0000 to SYNA2393.
    
    Also, the _STA relies on value of I2CN to report correct status.
    
    Set acpi_gbl_parse_table_as_term_list so the value of I2CN can be
    correctly set up, and _INI can get run. The ACPI table in this machine
    is designed to get parsed this way.
    
    Also, change the quirk table to a more generic name.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=198515
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b95f8ca8d71987199de1f072fd11fa562150489c
Author: Eric Biggers <ebiggers@google.com>
Date:   Wed Jan 31 17:30:21 2018 -0800

    KVM/x86: remove WARN_ON() for when vm_munmap() fails
    
    commit 103c763c72dd2df3e8c91f2d7ec88f98ed391111 upstream.
    
    On x86, special KVM memslots such as the TSS region have anonymous
    memory mappings created on behalf of userspace, and these mappings are
    removed when the VM is destroyed.
    
    It is however possible for removing these mappings via vm_munmap() to
    fail.  This can most easily happen if the thread receives SIGKILL while
    it's waiting to acquire ->mmap_sem.   This triggers the 'WARN_ON(r < 0)'
    in __x86_set_memory_region().  syzkaller was able to hit this, using
    'exit()' to send the SIGKILL.  Note that while the vm_munmap() failure
    results in the mapping not being removed immediately, it is not leaked
    forever but rather will be freed when the process exits.
    
    It's not really possible to handle this failure properly, so almost
    every other caller of vm_munmap() doesn't check the return value.  It's
    a limitation of having the kernel manage these mappings rather than
    userspace.
    
    So just remove the WARN_ON() so that users can't spam the kernel log
    with this warning.
    
    Fixes: f0d648bdf0a5 ("KVM: x86: map/unmap private slots in __x86_set_memory_region")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 615462370ab6c9a22d033ecf4ac3d005274701a6
Author: Tianyu Lan <lantianyu1986@gmail.com>
Date:   Tue Jan 16 17:34:07 2018 +0800

    KVM/x86: Fix wrong macro references of X86_CR0_PG_BIT and X86_CR4_PAE_BIT in kvm_valid_sregs()
    
    commit 37b95951c58fdf08dc10afa9d02066ed9f176fb5 upstream.
    
    kvm_valid_sregs() should use X86_CR0_PG and X86_CR4_PAE to check bit
    status rather than X86_CR0_PG_BIT and X86_CR4_PAE_BIT. This patch is
    to fix it.
    
    Fixes: f29810335965a(KVM/x86: Check input paging mode when cs.l is set)
    Reported-by: Jeremi Piotrowski <jeremi.piotrowski@gmail.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit db98acd6f85981850c761865ea3152d74cdb6035
Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Date:   Mon Oct 2 15:08:40 2017 +0100

    PCI/ASPM: Deal with missing root ports in link state handling
    
    commit ee8bdfb6568d86bb93f55f8d99c4c643e77304ee upstream.
    
    Even though it is unconventional, some PCIe host implementations omit the
    root ports entirely, and simply consist of a host bridge (which is not
    modeled as a device in the PCI hierarchy) and a link.
    
    When the downstream device is an endpoint, our current code does not seem
    to mind this unusual configuration. However, when PCIe switches are
    involved, the ASPM code assumes that any downstream switch port has a
    parent, and blindly dereferences the bus->parent->self field of the pci_dev
    struct to chain the downstream link state to the link state of the root
    port. Given that the root port is missing, the link is not modeled at all,
    and nor is the link state, and attempting to access it results in a NULL
    pointer dereference and a crash.
    
    Avoid this by allowing the link state chain to terminate at the downstream
    port if no root port exists.
    
    Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b4830f3ad9c5e2bb9fd9782c88fd7584556ddc8d
Author: Radim Krčmář <rkrcmar@redhat.com>
Date:   Thu Mar 1 15:24:25 2018 +0100

    KVM: x86: fix vcpu initialization with userspace lapic
    
    commit b7e31be385584afe7f073130e8e570d53c95f7fe upstream.
    
    Moving the code around broke this rare configuration.
    Use this opportunity to finally call lapic reset from vcpu reset.
    
    Reported-by: syzbot+fb7a33a4b6c35007a72b@syzkaller.appspotmail.com
    Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
    Fixes: 0b2e9904c159 ("KVM: x86: move LAPIC initialization after VMCS creation")
    Cc: stable@vger.kernel.org
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1f17daea70264051c084dcca757e67c8e0288fa0
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Thu Feb 22 16:43:18 2018 +0100

    KVM/VMX: Optimize vmx_vcpu_run() and svm_vcpu_run() by marking the RDMSR path as unlikely()
    
    commit 946fbbc13dce68902f64515b610eeb2a6c3d7a64 upstream.
    
    vmx_vcpu_run() and svm_vcpu_run() are large functions, and giving
    branch hints to the compiler can actually make a substantial cycle
    difference by keeping the fast path contiguous in memory.
    
    With this optimization, the retpoline-guest/retpoline-host case is
    about 50 cycles faster.
    
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: Jim Mattson <jmattson@google.com>
    Cc: David Woodhouse <dwmw@amazon.co.uk>
    Cc: KarimAllah Ahmed <karahmed@amazon.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: kvm@vger.kernel.org
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/20180222154318.20361-3-pbonzini@redhat.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 03d62460c7314704b4903aa38f07e05f540c0ec7
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Fri Feb 23 23:29:32 2018 +0100

    KVM: x86: move LAPIC initialization after VMCS creation
    
    commit 0b2e9904c15963e715d33e5f3f1387f17d19333a upstream.
    
    The initial reset of the local APIC is performed before the VMCS has been
    created, but it tries to do a vmwrite:
    
     vmwrite error: reg 810 value 4a00 (err 18944)
     CPU: 54 PID: 38652 Comm: qemu-kvm Tainted: G        W I      4.16.0-0.rc2.git0.1.fc28.x86_64 #1
     Hardware name: Intel Corporation S2600CW/S2600CW, BIOS SE5C610.86B.01.01.0003.090520141303 09/05/2014
     Call Trace:
      vmx_set_rvi [kvm_intel]
      vmx_hwapic_irr_update [kvm_intel]
      kvm_lapic_reset [kvm]
      kvm_create_lapic [kvm]
      kvm_arch_vcpu_init [kvm]
      kvm_vcpu_init [kvm]
      vmx_create_vcpu [kvm_intel]
      kvm_vm_ioctl [kvm]
    
    Move it later, after the VMCS has been created.
    
    Fixes: 4191db26b714 ("KVM: x86: Update APICv on APIC reset")
    Cc: stable@vger.kernel.org
    Cc: Liran Alon <liran.alon@oracle.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0d62a56dc454699790a43a57ffa4258ff909b3f5
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Thu Feb 22 16:43:17 2018 +0100

    KVM/x86: Remove indirect MSR op calls from SPEC_CTRL
    
    commit ecb586bd29c99fb4de599dec388658e74388daad upstream.
    
    Having a paravirt indirect call in the IBRS restore path is not a
    good idea, since we are trying to protect from speculative execution
    of bogus indirect branch targets.  It is also slower, so use
    native_wrmsrl() on the vmentry path too.
    
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: Jim Mattson <jmattson@google.com>
    Cc: David Woodhouse <dwmw@amazon.co.uk>
    Cc: KarimAllah Ahmed <karahmed@amazon.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: kvm@vger.kernel.org
    Cc: stable@vger.kernel.org
    Fixes: d28b387fb74da95d69d2615732f50cceb38e9a4d
    Link: http://lkml.kernel.org/r/20180222154318.20361-2-pbonzini@redhat.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7135aaf3ed637b298e7df848095ea53f24c1a8f8
Author: Wanpeng Li <wanpeng.li@hotmail.com>
Date:   Tue Feb 13 15:36:00 2018 +0100

    KVM: mmu: Fix overlap between public and private memslots
    
    commit b28676bb8ae4569cced423dc2a88f7cb319d5379 upstream.
    
    Reported by syzkaller:
    
        pte_list_remove: ffff9714eb1f8078 0->BUG
        ------------[ cut here ]------------
        kernel BUG at arch/x86/kvm/mmu.c:1157!
        invalid opcode: 0000 [#1] SMP
        RIP: 0010:pte_list_remove+0x11b/0x120 [kvm]
        Call Trace:
         drop_spte+0x83/0xb0 [kvm]
         mmu_page_zap_pte+0xcc/0xe0 [kvm]
         kvm_mmu_prepare_zap_page+0x81/0x4a0 [kvm]
         kvm_mmu_invalidate_zap_all_pages+0x159/0x220 [kvm]
         kvm_arch_flush_shadow_all+0xe/0x10 [kvm]
         kvm_mmu_notifier_release+0x6c/0xa0 [kvm]
         ? kvm_mmu_notifier_release+0x5/0xa0 [kvm]
         __mmu_notifier_release+0x79/0x110
         ? __mmu_notifier_release+0x5/0x110
         exit_mmap+0x15a/0x170
         ? do_exit+0x281/0xcb0
         mmput+0x66/0x160
         do_exit+0x2c9/0xcb0
         ? __context_tracking_exit.part.5+0x4a/0x150
         do_group_exit+0x50/0xd0
         SyS_exit_group+0x14/0x20
         do_syscall_64+0x73/0x1f0
         entry_SYSCALL64_slow_path+0x25/0x25
    
    The reason is that when creates new memslot, there is no guarantee for new
    memslot not overlap with private memslots. This can be triggered by the
    following program:
    
       #include <fcntl.h>
       #include <pthread.h>
       #include <setjmp.h>
       #include <signal.h>
       #include <stddef.h>
       #include <stdint.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>
       #include <sys/ioctl.h>
       #include <sys/stat.h>
       #include <sys/syscall.h>
       #include <sys/types.h>
       #include <unistd.h>
       #include <linux/kvm.h>
    
       long r[16];
    
       int main()
       {
            void *p = valloc(0x4000);
    
            r[2] = open("/dev/kvm", 0);
            r[3] = ioctl(r[2], KVM_CREATE_VM, 0x0ul);
    
            uint64_t addr = 0xf000;
            ioctl(r[3], KVM_SET_IDENTITY_MAP_ADDR, &addr);
            r[6] = ioctl(r[3], KVM_CREATE_VCPU, 0x0ul);
            ioctl(r[3], KVM_SET_TSS_ADDR, 0x0ul);
            ioctl(r[6], KVM_RUN, 0);
            ioctl(r[6], KVM_RUN, 0);
    
            struct kvm_userspace_memory_region mr = {
                    .slot = 0,
                    .flags = KVM_MEM_LOG_DIRTY_PAGES,
                    .guest_phys_addr = 0xf000,
                    .memory_size = 0x4000,
                    .userspace_addr = (uintptr_t) p
            };
            ioctl(r[3], KVM_SET_USER_MEMORY_REGION, &mr);
            return 0;
       }
    
    This patch fixes the bug by not adding a new memslot even if it
    overlaps with private memslots.
    
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Eric Biggers <ebiggers3@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>

commit 1ebf9ab6c4a00317933f527b5765b44c5504b912
Author: Wanpeng Li <wanpengli@tencent.com>
Date:   Thu Feb 8 15:32:45 2018 +0800

    KVM: X86: Fix SMRAM accessing even if VM is shutdown
    
    commit 95e057e25892eaa48cad1e2d637b80d0f1a4fac5 upstream.
    
    Reported by syzkaller:
    
       WARNING: CPU: 6 PID: 2434 at arch/x86/kvm/vmx.c:6660 handle_ept_misconfig+0x54/0x1e0 [kvm_intel]
       CPU: 6 PID: 2434 Comm: repro_test Not tainted 4.15.0+ #4
       RIP: 0010:handle_ept_misconfig+0x54/0x1e0 [kvm_intel]
       Call Trace:
        vmx_handle_exit+0xbd/0xe20 [kvm_intel]
        kvm_arch_vcpu_ioctl_run+0xdaf/0x1d50 [kvm]
        kvm_vcpu_ioctl+0x3e9/0x720 [kvm]
        do_vfs_ioctl+0xa4/0x6a0
        SyS_ioctl+0x79/0x90
        entry_SYSCALL_64_fastpath+0x25/0x9c
    
    The testcase creates a first thread to issue KVM_SMI ioctl, and then creates
    a second thread to mmap and operate on the same vCPU.  This triggers a race
    condition when running the testcase with multiple threads. Sometimes one thread
    exits with a triple fault while another thread mmaps and operates on the same
    vCPU.  Because CS=0x3000/IP=0x8000 is not mapped, accessing the SMI handler
    results in an EPT misconfig. This patch fixes it by returning RET_PF_EMULATE
    in kvm_handle_bad_page(), which will go on to cause an emulation failure and an
    exit with KVM_EXIT_INTERNAL_ERROR.
    
    Reported-by: syzbot+c1d9517cab094dae65e446c0c5b4de6c40f4dc58@syzkaller.appspotmail.com
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f925158cb0d28689e2fe75788b08a8a81cd9e3a3
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Thu Aug 17 15:03:32 2017 +0200

    KVM: x86: extend usage of RET_MMIO_PF_* constants
    
    commit 9b8ebbdb74b5ad76b9dfd8b101af17839174b126 upstream.
    
    The x86 MMU if full of code that returns 0 and 1 for retry/emulate.  Use
    the existing RET_MMIO_PF_RETRY/RET_MMIO_PF_EMULATE enum, renaming it to
    drop the MMIO part.
    
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Thomas Backlund <tmb@mageia.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e0c7b2b16666820bbc88623322d52d7cf725ac03
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Fri Feb 2 16:07:34 2018 +0100

    ARM: kvm: fix building with gcc-8
    
    commit 67870eb1204223598ea6d8a4467b482e9f5875b5 upstream.
    
    In banked-sr.c, we use a top-level '__asm__(".arch_extension virt")'
    statement to allow compilation of a multi-CPU kernel for ARMv6
    and older ARMv7-A that don't normally support access to the banked
    registers.
    
    This is considered to be a programming error by the gcc developers
    and will no longer work in gcc-8, where we now get a build error:
    
    /tmp/cc4Qy7GR.s:34: Error: Banked registers are not available with this architecture. -- `mrs r3,SP_usr'
    /tmp/cc4Qy7GR.s:41: Error: Banked registers are not available with this architecture. -- `mrs r3,ELR_hyp'
    /tmp/cc4Qy7GR.s:55: Error: Banked registers are not available with this architecture. -- `mrs r3,SP_svc'
    /tmp/cc4Qy7GR.s:62: Error: Banked registers are not available with this architecture. -- `mrs r3,LR_svc'
    /tmp/cc4Qy7GR.s:69: Error: Banked registers are not available with this architecture. -- `mrs r3,SPSR_svc'
    /tmp/cc4Qy7GR.s:76: Error: Banked registers are not available with this architecture. -- `mrs r3,SP_abt'
    
    Passign the '-march-armv7ve' flag to gcc works, and is ok here, because
    we know the functions won't ever be called on pre-ARMv7VE machines.
    Unfortunately, older compiler versions (4.8 and earlier) do not understand
    that flag, so we still need to keep the asm around.
    
    Backporting to stable kernels (4.6+) is needed to allow those to be built
    with future compilers as well.
    
    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84129
    Fixes: 33280b4cd1dc ("ARM: KVM: Add banked registers save/restore")
    Cc: stable@vger.kernel.org
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fc6be8bc1216e111a6003bcbbb6eaff32d2bd34e
Author: Ulf Magnusson <ulfalizer@gmail.com>
Date:   Mon Feb 5 02:21:13 2018 +0100

    ARM: mvebu: Fix broken PL310_ERRATA_753970 selects
    
    commit 8aa36a8dcde3183d84db7b0d622ffddcebb61077 upstream.
    
    The MACH_ARMADA_375 and MACH_ARMADA_38X boards select ARM_ERRATA_753970,
    but it was renamed to PL310_ERRATA_753970 by commit fa0ce4035d48 ("ARM:
    7162/1: errata: tidy up Kconfig options for PL310 errata workarounds").
    
    Fix the selects to use the new name.
    
    Discovered with the
    https://github.com/ulfalizer/Kconfiglib/blob/master/examples/list_undefined.py
    script.
    Fixes: fa0ce4035d48 ("ARM: 7162/1: errata: tidy up Kconfig options for
    PL310 errata workarounds"
    cc: stable@vger.kernel.org
    Signed-off-by: Ulf Magnusson <ulfalizer@gmail.com>
    Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4c02f0164b0ea69834976cc6578591b99a06dca4
Author: Daniel Schultz <d.schultz@phytec.de>
Date:   Tue Feb 13 10:44:32 2018 +0100

    ARM: dts: rockchip: Remove 1.8 GHz operation point from phycore som
    
    commit 5ce0bad4ccd04c8a989e94d3c89e4e796ac22e48 upstream.
    
    Rockchip recommends to run the CPU cores only with operations points of
    1.6 GHz or lower.
    
    Removed the cpu0 node with too high operation points and use the default
    values instead.
    
    Fixes: 903d31e34628 ("ARM: dts: rockchip: Add support for phyCORE-RK3288 SoM")
    Cc: stable@vger.kernel.org
    Signed-off-by: Daniel Schultz <d.schultz@phytec.de>
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8dc356e5b936b744b9e8e151ec6e46f670f5935e
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Feb 21 13:18:49 2018 +0100

    ARM: orion: fix orion_ge00_switch_board_info initialization
    
    commit 8337d083507b9827dfb36d545538b7789df834fd upstream.
    
    A section type mismatch warning shows up when building with LTO,
    since orion_ge00_mvmdio_bus_name was put in __initconst but not marked
    const itself:
    
    include/linux/of.h: In function 'spear_setup_of_timer':
    arch/arm/mach-spear/time.c:207:34: error: 'timer_of_match' causes a section type conflict with 'orion_ge00_mvmdio_bus_name'
     static const struct of_device_id timer_of_match[] __initconst = {
                                      ^
    arch/arm/plat-orion/common.c:475:32: note: 'orion_ge00_mvmdio_bus_name' was declared here
     static __initconst const char *orion_ge00_mvmdio_bus_name = "orion-mii";
                                    ^
    
    As pointed out by Andrew Lunn, it should in fact be 'const' but not
    '__initconst' because the string is never copied but may be accessed
    after the init sections are freed. To fix that, I get rid of the
    extra symbol and rewrite the initialization in a simpler way that
    assigns both the bus_id and modalias statically.
    
    I spotted another theoretical bug in the same place, where d->netdev[i]
    may be an out of bounds access, this can be fixed by moving the device
    assignment into the loop.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b20d1086410a66b1c23fad7237d52e0ace67fc2b
Author: Jan Beulich <JBeulich@suse.com>
Date:   Mon Feb 19 07:48:11 2018 -0700

    x86/mm: Fix {pmd,pud}_{set,clear}_flags()
    
    commit 842cef9113c2120f74f645111ded1e020193d84c upstream.
    
    Just like pte_{set,clear}_flags() their PMD and PUD counterparts should
    not do any address translation. This was outright wrong under Xen
    (causing a dead boot with no useful output on "suitable" systems), and
    produced needlessly more complicated code (even if just slightly) when
    paravirt was enabled.
    
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Acked-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/5A8AF1BB02000078001A91C3@prv-mh.provo.novell.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 656772cb723303933387ad1a1f49db78eb45a460
Author: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Date:   Fri Feb 16 13:20:48 2018 -0800

    nospec: Allow index argument to have const-qualified type
    
    commit b98c6a160a057d5686a8c54c79cc6c8c94a7d0c8 upstream.
    
    The last expression in a statement expression need not be a bare
    variable, quoting gcc docs
    
      The last thing in the compound statement should be an expression
      followed by a semicolon; the value of this subexpression serves as the
      value of the entire construct.
    
    and we already use that in e.g. the min/max macros which end with a
    ternary expression.
    
    This way, we can allow index to have const-qualified type, which will in
    some cases avoid the need for introducing a local copy of index of
    non-const qualified type. That, in turn, can prevent readers not
    familiar with the internals of array_index_nospec from wondering about
    the seemingly redundant extra variable, and I think that's worthwhile
    considering how confusing the whole _nospec business is.
    
    The expression _i&_mask has type unsigned long (since that is the type
    of _mask, and the BUILD_BUG_ONs guarantee that _i will get promoted to
    that), so in order not to change the type of the whole expression, add
    a cast back to typeof(_i).
    
    Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Arjan van de Ven <arjan@linux.intel.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: David Woodhouse <dwmw2@infradead.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: linux-arch@vger.kernel.org
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/151881604837.17395.10812767547837568328.stgit@dwillia2-desk3.amr.corp.intel.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 81a158d21498a6d30175d1d7fc49420a5f6f09f9
Author: David Hildenbrand <david@redhat.com>
Date:   Wed Feb 7 12:46:45 2018 +0100

    KVM: s390: consider epoch index on TOD clock syncs
    
    commit 1575767ef3cf5326701d2ae3075b7732cbc855e4 upstream.
    
    For now, we don't take care of over/underflows. Especially underflows
    are critical:
    
    Assume the epoch is currently 0 and we get a sync request for delta=1,
    meaning the TOD is moved forward by 1 and we have to fix it up by
    subtracting 1 from the epoch. Right now, this will leave the epoch
    index untouched, resulting in epoch=-1, epoch_idx=0, which is wrong.
    
    We have to take care of over and underflows, also for the VSIE case. So
    let's factor out calculation into a separate function.
    
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Message-Id: <20180207114647.6220-5-david@redhat.com>
    Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Fixes: 8fa1696ea781 ("KVM: s390: Multiple Epoch Facility support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
    [use u8 for idx]
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit dbab3751bcc7f37cff464a4844133221b304d8a8
Author: David Hildenbrand <david@redhat.com>
Date:   Wed Feb 7 12:46:44 2018 +0100

    KVM: s390: consider epoch index on hotplugged CPUs
    
    commit d16b52cb9cdb6f06dea8ab2f0a428e7d7f0b0a81 upstream.
    
    We must copy both, the epoch and the epoch_idx.
    
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Message-Id: <20180207114647.6220-4-david@redhat.com>
    Fixes: 8fa1696ea781 ("KVM: s390: Multiple Epoch Facility support")
    Reviewed-by: Cornelia Huck <cohuck@redhat.com>
    Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Fixes: 8fa1696ea781 ("KVM: s390: Multiple Epoch Facility support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 58a5d1ac69a72f6452ee16612c897f4f017c9c03
Author: David Hildenbrand <david@redhat.com>
Date:   Wed Feb 7 12:46:43 2018 +0100

    KVM: s390: provide only a single function for setting the tod (fix SCK)
    
    commit 0e7def5fb0dc53ddbb9f62a497d15f1e11ccdc36 upstream.
    
    Right now, SET CLOCK called in the guest does not properly take care of
    the epoch index, as the call goes via the old kvm_s390_set_tod_clock()
    interface. So the epoch index is neither reset to 0, if required, nor
    properly set to e.g. 0xff on negative values.
    
    Fix this by providing a single kvm_s390_set_tod_clock() function. Move
    Multiple-epoch facility handling into it.
    
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Message-Id: <20180207114647.6220-3-david@redhat.com>
    Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Fixes: 8fa1696ea781 ("KVM: s390: Multiple Epoch Facility support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c09ea9a8da5b91baba50a0e8e4d2ac95e163e585
Author: David Hildenbrand <david@redhat.com>
Date:   Wed Feb 7 12:46:42 2018 +0100

    KVM: s390: take care of clock-comparator sign control
    
    commit 5fe01793dd953ab947fababe8abaf5ed5258c8df upstream.
    
    Missed when enabling the Multiple-epoch facility. If the facility is
    installed and the control is set, a sign based comaprison has to be
    performed.
    
    Right now we would inject wrong interrupts and ignore interrupt
    conditions. Also the sleep time is calculated in a wrong way.
    
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Message-Id: <20180207114647.6220-2-david@redhat.com>
    Fixes: 8fa1696ea781 ("KVM: s390: Multiple Epoch Facility support")
    Cc: stable@vger.kernel.org
    Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bd3ead4576387fc1d71952441c218e57c275cac0
Author: Anna Karbownik <anna.karbownik@intel.com>
Date:   Thu Feb 22 16:18:13 2018 +0100

    EDAC, sb_edac: Fix out of bound writes during DIMM configuration on KNL
    
    commit bf8486709ac7fad99e4040dea73fe466c57a4ae1 upstream.
    
    Commit
    
      3286d3eb906c ("EDAC, sb_edac: Drop NUM_CHANNELS from 8 back to 4")
    
    decreased NUM_CHANNELS from 8 to 4, but this is not enough for Knights
    Landing which supports up to 6 channels.
    
    This caused out-of-bounds writes to pvt->mirror_mode and pvt->tolm
    variables which don't pay critical role on KNL code path, so the memory
    corruption wasn't causing any visible driver failures.
    
    The easiest way of fixing it is to change NUM_CHANNELS to 6. Do that.
    
    An alternative solution would be to restructure the KNL part of the
    driver to 2MC/3channel representation.
    
    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Anna Karbownik <anna.karbownik@intel.com>
    Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: jim.m.snow@intel.com
    Cc: krzysztof.paliswiat@intel.com
    Cc: lukasz.odzioba@intel.com
    Cc: qiuxu.zhuo@intel.com
    Cc: linux-edac <linux-edac@vger.kernel.org>
    Cc: <stable@vger.kernel.org>
    Fixes: 3286d3eb906c ("EDAC, sb_edac: Drop NUM_CHANNELS from 8 back to 4")
    Link: http://lkml.kernel.org/r/1519312693-4789-1-git-send-email-anna.karbownik@intel.com
    [ Massage commit message. ]
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1ba2b9e01dbfb9af1da2880b24fb001ea07bb664
Author: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Date:   Sat Feb 10 06:14:10 2018 -0500

    media: m88ds3103: don't call a non-initalized function
    
    commit b9c97c67fd19262c002d94ced2bfb513083e161e upstream.
    
    If m88d3103 chip ID is not recognized, the device is not initialized.
    
    However, it returns from probe without any error, causing this OOPS:
    
    [    7.689289] Unable to handle kernel NULL pointer dereference at virtual address 00000000
    [    7.689297] pgd = 7b0bd7a7
    [    7.689302] [00000000] *pgd=00000000
    [    7.689318] Internal error: Oops: 80000005 [#1] SMP ARM
    [    7.689322] Modules linked in: dvb_usb_dvbsky(+) m88ds3103 dvb_usb_v2 dvb_core videobuf2_vmalloc videobuf2_memops videobuf2_core crc32_arm_ce videodev media
    [    7.689358] CPU: 3 PID: 197 Comm: systemd-udevd Not tainted 4.15.0-mcc+ #23
    [    7.689361] Hardware name: BCM2835
    [    7.689367] PC is at 0x0
    [    7.689382] LR is at m88ds3103_attach+0x194/0x1d0 [m88ds3103]
    [    7.689386] pc : [<00000000>]    lr : [<bf0ae1ec>]    psr: 60000013
    [    7.689391] sp : ed8e5c20  ip : ed8c1e00  fp : ed8945c0
    [    7.689395] r10: ed894000  r9 : ed894378  r8 : eda736c0
    [    7.689400] r7 : ed894070  r6 : ed8e5c44  r5 : bf0bb040  r4 : eda77600
    [    7.689405] r3 : 00000000  r2 : 00000000  r1 : 00000000  r0 : eda77600
    [    7.689412] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
    [    7.689417] Control: 10c5383d  Table: 2d8e806a  DAC: 00000051
    [    7.689423] Process systemd-udevd (pid: 197, stack limit = 0xe9dbfb63)
    [    7.689428] Stack: (0xed8e5c20 to 0xed8e6000)
    [    7.689439] 5c20: ed853a80 eda73640 ed894000 ed8942c0 ed853a80 bf0b9e98 ed894070 bf0b9f10
    [    7.689449] 5c40: 00000000 00000000 bf08c17c c08dfc50 00000000 00000000 00000000 00000000
    [    7.689459] 5c60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    [    7.689468] 5c80: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    [    7.689479] 5ca0: 00000000 00000000 ed8945c0 ed8942c0 ed894000 ed894830 bf0b9e98 00000000
    [    7.689490] 5cc0: ed894378 bf0a3cb4 bf0bc3b0 0000533b ed920540 00000000 00000034 bf0a6434
    [    7.689500] 5ce0: ee952070 ed826600 bf0a7038 bf0a2dd8 00000001 bf0a6768 bf0a2f90 ed8943c0
    [    7.689511] 5d00: 00000000 c08eca68 ed826620 ed826620 00000000 ee952070 bf0bc034 ee952000
    [    7.689521] 5d20: ed826600 bf0bb080 ffffffed c0aa9e9c c0aa9dac ed826620 c16edf6c c168c2c8
    [    7.689531] 5d40: c16edf70 00000000 bf0bc034 0000000d 00000000 c08e268c bf0bb080 ed826600
    [    7.689541] 5d60: bf0bc034 ed826654 ed826620 bf0bc034 c164c8bc 00000000 00000001 00000000
    [    7.689553] 5d80: 00000028 c08e2948 00000000 bf0bc034 c08e2848 c08e0778 ee9f0a58 ed88bab4
    [    7.689563] 5da0: bf0bc034 ed90ba80 c168c1f0 c08e1934 bf0bb3bc c17045ac bf0bc034 c164c8bc
    [    7.689574] 5dc0: bf0bc034 bf0bb3bc ed91f564 c08e34ec bf0bc000 c164c8bc bf0bc034 c0aa8dc4
    [    7.689584] 5de0: ffffe000 00000000 bf0bf000 ed91f600 ed91f564 c03021e4 00000001 00000000
    [    7.689595] 5e00: c166e040 8040003f ed853a80 bf0bc448 00000000 c1678174 ed853a80 f0f22000
    [    7.689605] 5e20: f0f21fff 8040003f 014000c0 ed91e700 ed91e700 c16d8e68 00000001 ed91e6c0
    [    7.689615] 5e40: bf0bc400 00000001 bf0bc400 ed91f564 00000001 00000000 00000028 c03c9a24
    [    7.689625] 5e60: 00000001 c03c8c94 ed8e5f50 ed8e5f50 00000001 bf0bc400 ed91f540 c03c8cb0
    [    7.689637] 5e80: bf0bc40c 00007fff bf0bc400 c03c60b0 00000000 bf0bc448 00000028 c0e09684
    [    7.689647] 5ea0: 00000002 bf0bc530 c1234bf8 bf0bc5dc bf0bc514 c10ebbe8 ffffe000 bf000000
    [    7.689657] 5ec0: 00011538 00000000 ed8e5f48 00000000 00000000 00000000 00000000 00000000
    [    7.689666] 5ee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    [    7.689676] 5f00: 00000000 00000000 7fffffff 00000000 00000013 b6e55a18 0000017b c0309104
    [    7.689686] 5f20: ed8e4000 00000000 00510af0 c03c9430 7fffffff 00000000 00000003 00000000
    [    7.689697] 5f40: 00000000 f0f0f000 00011538 00000000 f0f107b0 f0f0f000 00011538 f0f1fdb8
    [    7.689707] 5f60: f0f1fbe8 f0f1b974 00004000 000041e0 bf0bc3d0 00000001 00000000 000024c4
    [    7.689717] 5f80: 0000002d 0000002e 00000019 00000000 00000010 00000000 16894000 00000000
    [    7.689727] 5fa0: 00000000 c0308f20 16894000 00000000 00000013 b6e55a18 00000000 b6e5652c
    [    7.689737] 5fc0: 16894000 00000000 00000000 0000017b 00020000 00508110 00000000 00510af0
    [    7.689748] 5fe0: bef68948 bef68938 b6e4d3d0 b6d32590 60000010 00000013 00000000 00000000
    [    7.689790] [<bf0ae1ec>] (m88ds3103_attach [m88ds3103]) from [<bf0b9f10>] (dvbsky_s960c_attach+0x78/0x280 [dvb_usb_dvbsky])
    [    7.689821] [<bf0b9f10>] (dvbsky_s960c_attach [dvb_usb_dvbsky]) from [<bf0a3cb4>] (dvb_usbv2_probe+0xa3c/0x1024 [dvb_usb_v2])
    [    7.689849] [<bf0a3cb4>] (dvb_usbv2_probe [dvb_usb_v2]) from [<c0aa9e9c>] (usb_probe_interface+0xf0/0x2a8)
    [    7.689869] [<c0aa9e9c>] (usb_probe_interface) from [<c08e268c>] (driver_probe_device+0x2f8/0x4b4)
    [    7.689881] [<c08e268c>] (driver_probe_device) from [<c08e2948>] (__driver_attach+0x100/0x11c)
    [    7.689895] [<c08e2948>] (__driver_attach) from [<c08e0778>] (bus_for_each_dev+0x4c/0x9c)
    [    7.689909] [<c08e0778>] (bus_for_each_dev) from [<c08e1934>] (bus_add_driver+0x1c0/0x264)
    [    7.689919] [<c08e1934>] (bus_add_driver) from [<c08e34ec>] (driver_register+0x78/0xf4)
    [    7.689931] [<c08e34ec>] (driver_register) from [<c0aa8dc4>] (usb_register_driver+0x70/0x134)
    [    7.689946] [<c0aa8dc4>] (usb_register_driver) from [<c03021e4>] (do_one_initcall+0x44/0x168)
    [    7.689963] [<c03021e4>] (do_one_initcall) from [<c03c9a24>] (do_init_module+0x64/0x1f4)
    [    7.689979] [<c03c9a24>] (do_init_module) from [<c03c8cb0>] (load_module+0x20a0/0x25c8)
    [    7.689993] [<c03c8cb0>] (load_module) from [<c03c9430>] (SyS_finit_module+0xb4/0xec)
    [    7.690007] [<c03c9430>] (SyS_finit_module) from [<c0308f20>] (ret_fast_syscall+0x0/0x54)
    [    7.690018] Code: bad PC value
    
    This may happen on normal circumstances, if, for some reason, the demod
    hangs and start returning an invalid chip ID:
    
    [   10.394395] m88ds3103 3-0068: Unknown device. Chip_id=00
    
    So, change the logic to cause probe to fail with -ENODEV, preventing
    the OOPS.
    
    Detected while testing DVB MMAP patches on Raspberry Pi 3 with
    DVBSky S960CI.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ccddee811ebad96a4af2c8de6fda104c40ff60f2
Author: Ming Lei <ming.lei@redhat.com>
Date:   Fri Feb 23 23:36:56 2018 +0800

    blk-mq: don't call io sched's .requeue_request when requeueing rq to ->dispatch
    
    commit 105976f517791aed3b11f8f53b308a2069d42055 upstream.
    
    __blk_mq_requeue_request() covers two cases:
    
    - one is that the requeued request is added to hctx->dispatch, such as
    blk_mq_dispatch_rq_list()
    
    - another case is that the request is requeued to io scheduler, such as
    blk_mq_requeue_request().
    
    We should call io sched's .requeue_request callback only for the 2nd
    case.
    
    Cc: Paolo Valente <paolo.valente@linaro.org>
    Cc: Omar Sandoval <osandov@fb.com>
    Fixes: bd166ef183c2 ("blk-mq-sched: add framework for MQ capable IO schedulers")
    Cc: stable@vger.kernel.org
    Reviewed-by: Bart Van Assche <bart.vanassche@wdc.com>
    Acked-by: Paolo Valente <paolo.valente@linaro.org>
    Signed-off-by: Ming Lei <ming.lei@redhat.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c5f32462f0df00bc32426c558272d33588c46017
Author: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Date:   Tue Feb 27 18:58:17 2018 +0100

    s390/qeth: fix IPA command submission race
    
    
    [ Upstream commit d22ffb5a712f9211ffd104c38fc17cbfb1b5e2b0 ]
    
    If multiple IPA commands are build & sent out concurrently,
    fill_ipacmd_header() may assign a seqno value to a command that's
    different from what send_control_data() later assigns to this command's
    reply.
    This is due to other commands passing through send_control_data(),
    and incrementing card->seqno.ipa along the way.
    
    So one IPA command has no reply that's waiting for its seqno, while some
    other IPA command has multiple reply objects waiting for it.
    Only one of those waiting replies wins, and the other(s) times out and
    triggers a recovery via send_ipa_cmd().
    
    Fix this by making sure that the same seqno value is assigned to
    a command and its reply object.
    Do so immediately before submitting the command & while holding the
    irq_pending "lock", to produce nicely ascending seqnos.
    
    As a side effect, *all* IPA commands now use a reply object that's
    waiting for its actual seqno. Previously, early IPA commands that were
    submitted while the card was still DOWN used the "catch-all" IDX seqno.
    
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit eae17c4063900441277b323775e3f922986a0a8c
Author: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Date:   Tue Feb 27 18:58:16 2018 +0100

    s390/qeth: fix IP address lookup for L3 devices
    
    
    [ Upstream commit c5c48c58b259bb8f0482398370ee539d7a12df3e ]
    
    Current code ("qeth_l3_ip_from_hash()") matches a queried address object
    against objects in the IP table by IP address, Mask/Prefix Length and
    MAC address ("qeth_l3_ipaddrs_is_equal()"). But what callers actually
    require is either
    a) "is this IP address registered" (ie. match by IP address only),
    before adding a new address.
    b) or "is this address object registered" (ie. match all relevant
       attributes), before deleting an address.
    
    Right now
    1. the ADD path is too strict in its lookup, and eg. doesn't detect
    conflicts between an existing NORMAL address and a new VIPA address
    (because the NORMAL address will have mask != 0, while VIPA has
    a mask == 0),
    2. the DELETE path is not strict enough, and eg. allows del_rxip() to
    delete a VIPA address as long as the IP address matches.
    
    Fix all this by adding helpers (_addr_match_ip() and _addr_match_all())
    that do the appropriate checking.
    
    Note that the ADD path for NORMAL addresses is special, as qeth keeps
    track of how many times such an address is in use (and there is no
    immediate way of returning errors to the caller). So when a requested
    NORMAL address _fully_ matches an existing one, it's not considered a
    conflict and we merely increment the refcount.
    
    Fixes: 5f78e29ceebf ("qeth: optimize IP handling in rx_mode callback")
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 87c4789f452d3030b149df8ae8a0cce1e37a9da4
Author: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Date:   Tue Feb 27 18:58:15 2018 +0100

    Revert "s390/qeth: fix using of ref counter for rxip addresses"
    
    
    [ Upstream commit 4964c66fd49b2e2342da35358f2ff74614bcbaee ]
    
    This reverts commit cb816192d986f7596009dedcf2201fe2e5bc2aa7.
    
    The issue this attempted to fix never actually occurs.
    l3_add_rxip() checks (via l3_ip_from_hash()) if the requested address
    was previously added to the card. If so, it returns -EEXIST and doesn't
    call l3_add_ip().
    As a result, the "address exists" path in l3_add_ip() is never taken
    for rxip addresses, and this patch had no effect.
    
    Fixes: cb816192d986 ("s390/qeth: fix using of ref counter for rxip addresses")
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 56f662db7f5629ee0f5566ac229bc8a188339550
Author: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Date:   Tue Feb 27 18:58:14 2018 +0100

    s390/qeth: fix double-free on IP add/remove race
    
    
    [ Upstream commit 14d066c3531a87f727968cacd85bd95c75f59843 ]
    
    Registering an IPv4 address with the HW takes quite a while, so we
    temporarily drop the ip_htable lock. Any concurrent add/remove of the
    same IP adjusts the IP's use count, and (on remove) is then blocked by
    addr->in_progress.
    After the register call has completed, we check the use count for
    concurrently attempted add/remove calls - and possibly straight-away
    deregister the IP again. This happens via l3_delete_ip(), which
    1) looks up the queried IP in the htable (getting a reference to the
       *same* queried object),
    2) deregisters the IP from the HW, and
    3) frees the IP object.
    
    The caller in l3_add_ip() then does a second free on the same object.
    
    For this case, skip all the extra checks and lookups in l3_delete_ip()
    and just deregister & free the IP object ourselves.
    
    Fixes: 5f78e29ceebf ("qeth: optimize IP handling in rx_mode callback")
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 027637104ddf90f87d463002f369599e0cef6c1d
Author: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Date:   Tue Feb 27 18:58:13 2018 +0100

    s390/qeth: fix IP removal on offline cards
    
    
    [ Upstream commit 98d823ab1fbdcb13abc25b420f9bb71bade42056 ]
    
    If the HW is not reachable, then none of the IPs in qeth's internal
    table has been registered with the HW yet. So when deleting such an IP,
    there's no need to stage it for deregistration - just drop it from
    the table.
    
    This fixes the "add-delete-add" scenario on an offline card, where the
    the second "add" merely increments the IP's use count. But as the IP is
    still set to DISP_ADDR_DELETE from the previous "delete" step,
    l3_recover_ip() won't register it with the HW when the card goes online.
    
    Fixes: 5f78e29ceebf ("qeth: optimize IP handling in rx_mode callback")
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fa4919e37f8e1c37e07ea4a5c590cbe59fe696b9
Author: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Date:   Tue Feb 27 18:58:12 2018 +0100

    s390/qeth: fix overestimated count of buffer elements
    
    
    [ Upstream commit 12472af89632beb1ed8dea29d4efe208ca05b06a ]
    
    qeth_get_elements_for_range() doesn't know how to handle a 0-length
    range (ie. start == end), and returns 1 when it should return 0.
    Such ranges occur on TSO skbs, where the L2/L3/L4 headers (and thus all
    of the skb's linear data) are skipped when mapping the skb into regular
    buffer elements.
    
    This overestimation may cause several performance-related issues:
    1. sub-optimal IO buffer selection, where the next buffer gets selected
       even though the skb would actually still fit into the current buffer.
    2. forced linearization, if the element count for a non-linear skb
       exceeds QETH_MAX_BUFFER_ELEMENTS.
    
    Rather than modifying qeth_get_elements_for_range() and adding overhead
    to every caller, fix up those callers that are in risk of passing a
    0-length range.
    
    Fixes: 2863c61334aa ("qeth: refactor calculation of SBALE count")
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 128c7e69233334895e887f942c8f5c72f51821f3
Author: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Date:   Fri Feb 9 11:03:50 2018 +0100

    s390/qeth: fix SETIP command handling
    
    
    [ Upstream commit 1c5b2216fbb973a9410e0b06389740b5c1289171 ]
    
    send_control_data() applies some special handling to SETIP v4 IPA
    commands. But current code parses *all* command types for the SETIP
    command code. Limit the command code check to IPA commands.
    
    Fixes: 5b54e16f1a54 ("qeth: do not spin for SETIP ip assist command")
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fcdfb9d80dc926f07b42129d08b197fd5d2ec65d
Author: Ursula Braun <ubraun@linux.vnet.ibm.com>
Date:   Fri Feb 9 11:03:49 2018 +0100

    s390/qeth: fix underestimated count of buffer elements
    
    
    [ Upstream commit 89271c65edd599207dd982007900506283c90ae3 ]
    
    For a memory range/skb where the last byte falls onto a page boundary
    (ie. 'end' is of the form xxx...xxx001), the PFN_UP() part of the
    calculation currently doesn't round up to the next PFN due to an
    off-by-one error.
    Thus qeth believes that the skb occupies one page less than it
    actually does, and may select a IO buffer that doesn't have enough spare
    buffer elements to fit all of the skb's data.
    HW detects this as a malformed buffer descriptor, and raises an
    exception which then triggers device recovery.
    
    Fixes: 2863c61334aa ("qeth: refactor calculation of SBALE count")
    Signed-off-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 99a781947c2ab1e7b77bc88017fa58e78ff5c3ba
Author: Jason Wang <jasowang@redhat.com>
Date:   Wed Feb 28 18:20:04 2018 +0800

    virtio-net: disable NAPI only when enabled during XDP set
    
    
    [ Upstream commit 4e09ff5362843dff3accfa84c805c7f3a99de9cd ]
    
    We try to disable NAPI to prevent a single XDP TX queue being used by
    multiple cpus. But we don't check if device is up (NAPI is enabled),
    this could result stall because of infinite wait in
    napi_disable(). Fixing this by checking device state through
    netif_running() before.
    
    Fixes: 4941d472bf95b ("virtio-net: do not reset during XDP set")
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5134b919cc2c2b225ac8d82b54cac5dcb3c41267
Author: Jason Wang <jasowang@redhat.com>
Date:   Sat Feb 24 11:32:25 2018 +0800

    tuntap: disable preemption during XDP processing
    
    
    [ Upstream commit 23e43f07f896f8578318cfcc9466f1e8b8ab21b6 ]
    
    Except for tuntap, all other drivers' XDP was implemented at NAPI
    poll() routine in a bh. This guarantees all XDP operation were done at
    the same CPU which is required by e.g BFP_MAP_TYPE_PERCPU_ARRAY. But
    for tuntap, we do it in process context and we try to protect XDP
    processing by RCU reader lock. This is insufficient since
    CONFIG_PREEMPT_RCU can preempt the RCU reader critical section which
    breaks the assumption that all XDP were processed in the same CPU.
    
    Fixing this by simply disabling preemption during XDP processing.
    
    Fixes: 761876c857cb ("tap: XDP support")
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1903344b6320e18b82cb9f49c0e9b8fd0f80b695
Author: Jason Wang <jasowang@redhat.com>
Date:   Sat Feb 24 11:32:26 2018 +0800

    tuntap: correctly add the missing XDP flush
    
    
    [ Upstream commit 1bb4f2e868a2891ab8bc668b8173d6ccb8c4ce6f ]
    
    We don't flush batched XDP packets through xdp_do_flush_map(), this
    will cause packets stall at TX queue. Consider we don't do XDP on NAPI
    poll(), the only possible fix is to call xdp_do_flush_map()
    immediately after xdp_do_redirect().
    
    Note, this in fact won't try to batch packets through devmap, we could
    address in the future.
    
    Reported-by: Christoffer Dall <christoffer.dall@linaro.org>
    Fixes: 761876c857cb ("tap: XDP support")
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit abb4a8b870b5c644c9bb6d9bd372298002f0a65f
Author: Soheil Hassas Yeganeh <soheil@google.com>
Date:   Tue Feb 27 18:32:18 2018 -0500

    tcp: purge write queue upon RST
    
    
    [ Upstream commit a27fd7a8ed3856faaf5a2ff1c8c5f00c0667aaa0 ]
    
    When the connection is reset, there is no point in
    keeping the packets on the write queue until the connection
    is closed.
    
    RFC 793 (page 70) and RFC 793-bis (page 64) both suggest
    purging the write queue upon RST:
    https://tools.ietf.org/html/draft-ietf-tcpm-rfc793bis-07
    
    Moreover, this is essential for a correct MSG_ZEROCOPY
    implementation, because userspace cannot call close(fd)
    before receiving zerocopy signals even when the connection
    is reset.
    
    Fixes: f214f915e7db ("tcp: enable MSG_ZEROCOPY")
    Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Yuchung Cheng <ycheng@google.com>
    Signed-off-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit eec434c573e78c1190a812cb48a8b16c254541ea
Author: Jason A. Donenfeld <Jason@zx2c4.com>
Date:   Wed Feb 21 04:41:59 2018 +0100

    netlink: put module reference if dump start fails
    
    
    [ Upstream commit b87b6194be631c94785fe93398651e804ed43e28 ]
    
    Before, if cb->start() failed, the module reference would never be put,
    because cb->cb_running is intentionally false at this point. Users are
    generally annoyed by this because they can no longer unload modules that
    leak references. Also, it may be possible to tediously wrap a reference
    counter back to zero, especially since module.c still uses atomic_inc
    instead of refcount_inc.
    
    This patch expands the error path to simply call module_put if
    cb->start() fails.
    
    Fixes: 41c87425a1ac ("netlink: do not set cb_running if dump's start() errs")
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit abd7663b5d1c07106b65361e6f2effd1c0313e7e
Author: Ido Schimmel <idosch@mellanox.com>
Date:   Sat Feb 17 00:30:44 2018 +0100

    mlxsw: spectrum_router: Do not unconditionally clear route offload indication
    
    
    [ Upstream commit d1c95af366961101819f07e3c64d44f3be7f0367 ]
    
    When mlxsw replaces (or deletes) a route it removes the offload
    indication from the replaced route. This is problematic for IPv4 routes,
    as the offload indication is stored in the fib_info which is usually
    shared between multiple routes.
    
    Instead of unconditionally clearing the offload indication, only clear
    it if no other route is using the fib_info.
    
    Fixes: 3984d1a89fe7 ("mlxsw: spectrum_router: Provide offload indication using nexthop flags")
    Signed-off-by: Ido Schimmel <idosch@mellanox.com>
    Reported-by: Alexander Petrovskiy <alexpe@mellanox.com>
    Tested-by: Alexander Petrovskiy <alexpe@mellanox.com>
    Signed-off-by: Jiri Pirko <jiri@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ebadf888288c9e069b0141a4f00784e7245c5e28
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Mon Feb 5 22:23:01 2018 +0100

    cls_u32: fix use after free in u32_destroy_key()
    
    
    [ Upstream commit d7cdee5ea8d28ae1b6922deb0c1badaa3aa0ef8c ]
    
    Li Shuang reported an Oops with cls_u32 due to an use-after-free
    in u32_destroy_key(). The use-after-free can be triggered with:
    
    dev=lo
    tc qdisc add dev $dev root handle 1: htb default 10
    tc filter add dev $dev parent 1: prio 5 handle 1: protocol ip u32 divisor 256
    tc filter add dev $dev protocol ip parent 1: prio 5 u32 ht 800:: match ip dst\
     10.0.0.0/8 hashkey mask 0x0000ff00 at 16 link 1:
    tc qdisc del dev $dev root
    
    Which causes the following kasan splat:
    
     ==================================================================
     BUG: KASAN: use-after-free in u32_destroy_key.constprop.21+0x117/0x140 [cls_u32]
     Read of size 4 at addr ffff881b83dae618 by task kworker/u48:5/571
    
     CPU: 17 PID: 571 Comm: kworker/u48:5 Not tainted 4.15.0+ #87
     Hardware name: Dell Inc. PowerEdge R730/072T6D, BIOS 2.1.7 06/16/2016
     Workqueue: tc_filter_workqueue u32_delete_key_freepf_work [cls_u32]
     Call Trace:
      dump_stack+0xd6/0x182
      ? dma_virt_map_sg+0x22e/0x22e
      print_address_description+0x73/0x290
      kasan_report+0x277/0x360
      ? u32_destroy_key.constprop.21+0x117/0x140 [cls_u32]
      u32_destroy_key.constprop.21+0x117/0x140 [cls_u32]
      u32_delete_key_freepf_work+0x1c/0x30 [cls_u32]
      process_one_work+0xae0/0x1c80
      ? sched_clock+0x5/0x10
      ? pwq_dec_nr_in_flight+0x3c0/0x3c0
      ? _raw_spin_unlock_irq+0x29/0x40
      ? trace_hardirqs_on_caller+0x381/0x570
      ? _raw_spin_unlock_irq+0x29/0x40
      ? finish_task_switch+0x1e5/0x760
      ? finish_task_switch+0x208/0x760
      ? preempt_notifier_dec+0x20/0x20
      ? __schedule+0x839/0x1ee0
      ? check_noncircular+0x20/0x20
      ? firmware_map_remove+0x73/0x73
      ? find_held_lock+0x39/0x1c0
      ? worker_thread+0x434/0x1820
      ? lock_contended+0xee0/0xee0
      ? lock_release+0x1100/0x1100
      ? init_rescuer.part.16+0x150/0x150
      ? retint_kernel+0x10/0x10
      worker_thread+0x216/0x1820
      ? process_one_work+0x1c80/0x1c80
      ? lock_acquire+0x1a5/0x540
      ? lock_downgrade+0x6b0/0x6b0
      ? sched_clock+0x5/0x10
      ? lock_release+0x1100/0x1100
      ? compat_start_thread+0x80/0x80
      ? do_raw_spin_trylock+0x190/0x190
      ? _raw_spin_unlock_irq+0x29/0x40
      ? trace_hardirqs_on_caller+0x381/0x570
      ? _raw_spin_unlock_irq+0x29/0x40
      ? finish_task_switch+0x1e5/0x760
      ? finish_task_switch+0x208/0x760
      ? preempt_notifier_dec+0x20/0x20
      ? __schedule+0x839/0x1ee0
      ? kmem_cache_alloc_trace+0x143/0x320
      ? firmware_map_remove+0x73/0x73
      ? sched_clock+0x5/0x10
      ? sched_clock_cpu+0x18/0x170
      ? find_held_lock+0x39/0x1c0
      ? schedule+0xf3/0x3b0
      ? lock_downgrade+0x6b0/0x6b0
      ? __schedule+0x1ee0/0x1ee0
      ? do_wait_intr_irq+0x340/0x340
      ? do_raw_spin_trylock+0x190/0x190
      ? _raw_spin_unlock_irqrestore+0x32/0x60
      ? process_one_work+0x1c80/0x1c80
      ? process_one_work+0x1c80/0x1c80
      kthread+0x312/0x3d0
      ? kthread_create_worker_on_cpu+0xc0/0xc0
      ret_from_fork+0x3a/0x50
    
     Allocated by task 1688:
      kasan_kmalloc+0xa0/0xd0
      __kmalloc+0x162/0x380
      u32_change+0x1220/0x3c9e [cls_u32]
      tc_ctl_tfilter+0x1ba6/0x2f80
      rtnetlink_rcv_msg+0x4f0/0x9d0
      netlink_rcv_skb+0x124/0x320
      netlink_unicast+0x430/0x600
      netlink_sendmsg+0x8fa/0xd60
      sock_sendmsg+0xb1/0xe0
      ___sys_sendmsg+0x678/0x980
      __sys_sendmsg+0xc4/0x210
      do_syscall_64+0x232/0x7f0
      return_from_SYSCALL_64+0x0/0x75
    
     Freed by task 112:
      kasan_slab_free+0x71/0xc0
      kfree+0x114/0x320
      rcu_process_callbacks+0xc3f/0x1600
      __do_softirq+0x2bf/0xc06
    
     The buggy address belongs to the object at ffff881b83dae600
      which belongs to the cache kmalloc-4096 of size 4096
     The buggy address is located 24 bytes inside of
      4096-byte region [ffff881b83dae600, ffff881b83daf600)
     The buggy address belongs to the page:
     page:ffffea006e0f6a00 count:1 mapcount:0 mapping:          (null) index:0x0 compound_mapcount: 0
     flags: 0x17ffffc0008100(slab|head)
     raw: 0017ffffc0008100 0000000000000000 0000000000000000 0000000100070007
     raw: dead000000000100 dead000000000200 ffff880187c0e600 0000000000000000
     page dumped because: kasan: bad access detected
    
     Memory state around the buggy address:
      ffff881b83dae500: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      ffff881b83dae580: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     >ffff881b83dae600: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                 ^
      ffff881b83dae680: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ffff881b83dae700: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ==================================================================
    
    The problem is that the htnode is freed before the linked knodes and the
    latter will try to access the first at u32_destroy_key() time.
    This change addresses the issue using the htnode refcnt to guarantee
    the correct free order. While at it also add a RCU annotation,
    to keep sparse happy.
    
    v1 -> v2: use rtnl_derefence() instead of RCU read locks
    v2 -> v3:
      - don't check refcnt in u32_destroy_hnode()
      - cleaned-up u32_destroy() implementation
      - cleaned-up code comment
    v3 -> v4:
      - dropped unneeded comment
    
    Reported-by: Li Shuang <shuali@redhat.com>
    Fixes: c0d378ef1266 ("net_sched: use tcf_queue_work() in u32 filter")
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Acked-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fb8a84cb9f6a305e1a887b9ca97515d5688f8bc1
Author: Tom Lendacky <thomas.lendacky@amd.com>
Date:   Tue Feb 20 15:22:05 2018 -0600

    amd-xgbe: Restore PCI interrupt enablement setting on resume
    
    
    [ Upstream commit cfd092f2db8b4b6727e1c03ef68a7842e1023573 ]
    
    After resuming from suspend, the PCI device support must re-enable the
    interrupt setting so that interrupts are actually delivered.
    
    Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e7b316ac78e2cb5f7fc75df63cef92f0a1210537
Author: Eran Ben Elisha <eranbe@mellanox.com>
Date:   Thu Jan 25 11:18:09 2018 +0200

    net/mlx5e: Verify inline header size do not exceed SKB linear size
    
    
    [ Upstream commit f600c6088018d1dbc5777d18daa83660f7ea4a64 ]
    
    Driver tries to copy at least MLX5E_MIN_INLINE bytes into the control
    segment of the WQE. It assumes that the linear part contains at least
    MLX5E_MIN_INLINE bytes, which can be wrong.
    
    Cited commit verified that driver will not copy more bytes into the
    inline header part that the actual size of the packet. Re-factor this
    check to make sure we do not exceed the linear part as well.
    
    This fix is aligned with the current driver's assumption that the entire
    L2 will be present in the linear part of the SKB.
    
    Fixes: 6aace17e64f4 ("net/mlx5e: Fix inline header size for small packets")
    Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com>
    Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cbd173b8105c259731c981849549b989c55624cf
Author: Ido Schimmel <idosch@mellanox.com>
Date:   Sun Feb 25 21:59:06 2018 +0200

    bridge: Fix VLAN reference count problem
    
    
    [ Upstream commit 0e5a82efda872c2469c210957d7d4161ef8f4391 ]
    
    When a VLAN is added on a port, a reference is taken on the
    corresponding master VLAN entry. If it does not already exist, then it
    is created and a reference taken.
    
    However, in the second case a reference is not really taken when
    CONFIG_REFCOUNT_FULL is enabled as refcount_inc() is replaced by
    refcount_inc_not_zero().
    
    Fix this by using refcount_set() on a newly created master VLAN entry.
    
    Fixes: 251277598596 ("net, bridge: convert net_bridge_vlan.refcnt from atomic_t to refcount_t")
    Signed-off-by: Ido Schimmel <idosch@mellanox.com>
    Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 00ec3b0ca32f28773c700b841f1802ec3d848051
Author: Alexey Kodanev <alexey.kodanev@oracle.com>
Date:   Mon Feb 5 15:10:35 2018 +0300

    sctp: fix dst refcnt leak in sctp_v6_get_dst()
    
    
    [ Upstream commit 957d761cf91cdbb175ad7d8f5472336a4d54dbf2 ]
    
    When going through the bind address list in sctp_v6_get_dst() and
    the previously found address is better ('matchlen > bmatchlen'),
    the code continues to the next iteration without releasing currently
    held destination.
    
    Fix it by releasing 'bdst' before continue to the next iteration, and
    instead of introducing one more '!IS_ERR(bdst)' check for dst_release(),
    move the already existed one right after ip6_dst_lookup_flow(), i.e. we
    shouldn't proceed further if we get an error for the route lookup.
    
    Fixes: dbc2b5e9a09e ("sctp: fix src address selection if using secondary addresses for ipv6")
    Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
    Acked-by: Neil Horman <nhorman@tuxdriver.com>
    Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 97ba6e5ff68454320695d1372d035c624b66c4ba
Author: David Ahern <dsahern@gmail.com>
Date:   Wed Feb 21 11:00:54 2018 -0800

    net: ipv4: Set addr_type in hash_keys for forwarded case
    
    
    [ Upstream commit 1fe4b1184c2ae2bfbf9e8b14c9c0c1945c98f205 ]
    
    The result of the skb flow dissect is copied from keys to hash_keys to
    ensure only the intended data is hashed. The original L4 hash patch
    overlooked setting the addr_type for this case; add it.
    
    Fixes: bf4e0a3db97eb ("net: ipv4: add support for ECMP hash policy choice")
    Reported-by: Ido Schimmel <idosch@idosch.org>
    Signed-off-by: David Ahern <dsahern@gmail.com>
    Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
    Reviewed-by: Ido Schimmel <idosch@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 73cb791fe41cdffda6f26aa0559dc17c11d0ee38
Author: Jiri Pirko <jiri@mellanox.com>
Date:   Tue Feb 13 11:22:42 2018 +0100

    mlxsw: spectrum_router: Fix error path in mlxsw_sp_vr_create
    
    
    [ Upstream commit 0f2d2b2736b08dafa3bde31d048750fbc8df3a31 ]
    
    Since mlxsw_sp_fib_create() and mlxsw_sp_mr_table_create()
    use ERR_PTR macro to propagate int err through return of a pointer,
    the return value is not NULL in case of failure. So if one
    of the calls fails, one of vr->fib4, vr->fib6 or vr->mr4_table
    is not NULL and mlxsw_sp_vr_is_used wrongly assumes
    that vr is in use which leads to crash like following one:
    
    [ 1293.949291] BUG: unable to handle kernel NULL pointer dereference at 00000000000006c9
    [ 1293.952729] IP: mlxsw_sp_mr_table_flush+0x15/0x70 [mlxsw_spectrum]
    
    Fix this by using local variables to hold the pointers and set vr->*
    only in case everything went fine.
    
    Fixes: 76610ebbde18 ("mlxsw: spectrum_router: Refactor virtual router handling")
    Fixes: a3d9bc506d64 ("mlxsw: spectrum_router: Extend virtual routers with IPv6 support")
    Fixes: d42b0965b1d4 ("mlxsw: spectrum_router: Add multicast routes notification handling functionality")
    Signed-off-by: Jiri Pirko <jiri@mellanox.com>
    Reviewed-by: Ido Schimmel <idosch@mellanox.com>
    Signed-off-by: Jiri Pirko <jiri@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0ab87ec99e9998b908281e92234b87d3d2e27e49
Author: Yuchung Cheng <ycheng@google.com>
Date:   Tue Feb 27 14:15:02 2018 -0800

    tcp: revert F-RTO extension to detect more spurious timeouts
    
    
    [ Upstream commit fc68e171d376c322e6777a3d7ac2f0278b68b17f ]
    
    This reverts commit 89fe18e44f7ee5ab1c90d0dff5835acee7751427.
    
    While the patch could detect more spurious timeouts, it could cause
    poor TCP performance on broken middle-boxes that modifies TCP packets
    (e.g. receive window, SACK options). Since the performance gain is
    much smaller compared to the potential loss. The best solution is
    to fully revert the change.
    
    Fixes: 89fe18e44f7e ("tcp: extend F-RTO to catch more spurious timeouts")
    Reported-by: Teodor Milkov <tm@del.bg>
    Signed-off-by: Yuchung Cheng <ycheng@google.com>
    Signed-off-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cc8dadb8c0f45ab5397d956487a8b0dad6c70a67
Author: Yuchung Cheng <ycheng@google.com>
Date:   Tue Feb 27 14:15:01 2018 -0800

    tcp: revert F-RTO middle-box workaround
    
    
    [ Upstream commit d4131f09770d9b7471c9da65e6ecd2477746ac5c ]
    
    This reverts commit cc663f4d4c97b7297fb45135ab23cfd508b35a77. While fixing
    some broken middle-boxes that modifies receive window fields, it does not
    address middle-boxes that strip off SACK options. The best solution is
    to fully revert this patch and the root F-RTO enhancement.
    
    Fixes: cc663f4d4c97 ("tcp: restrict F-RTO to work-around broken middle-boxes")
    Reported-by: Teodor Milkov <tm@del.bg>
    Signed-off-by: Yuchung Cheng <ycheng@google.com>
    Signed-off-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 36728a6b39c1c61f9f96281b09d3648ac27cce51
Author: Xin Long <lucien.xin@gmail.com>
Date:   Mon Feb 12 18:29:06 2018 +0800

    sctp: do not pr_err for the duplicated node in transport rhlist
    
    
    [ Upstream commit 27af86bb038d9c8b8066cd17854ddaf2ea92bce1 ]
    
    The pr_err in sctp_hash_transport was supposed to report a sctp bug
    for using rhashtable/rhlist.
    
    The err '-EEXIST' introduced in Commit cd2b70875058 ("sctp: check
    duplicate node before inserting a new transport") doesn't belong
    to that case.
    
    So just return -EEXIST back without pr_err any kmsg.
    
    Fixes: cd2b70875058 ("sctp: check duplicate node before inserting a new transport")
    Reported-by: Wei Chen <weichen@redhat.com>
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Acked-by: Neil Horman <nhorman@tuxdriver.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 54d6bc97b4c9af3dee9fc594c88d1ea1f9382630
Author: Ivan Vecera <ivecera@redhat.com>
Date:   Thu Feb 8 16:10:39 2018 +0100

    net/sched: cls_u32: fix cls_u32 on filter replace
    
    
    [ Upstream commit eb53f7af6f15285e2f6ada97285395343ce9f433 ]
    
    The following sequence is currently broken:
    
     # tc qdisc add dev foo ingress
     # tc filter replace dev foo protocol all ingress \
       u32 match u8 0 0 action mirred egress mirror dev bar1
     # tc filter replace dev foo protocol all ingress \
       handle 800::800 pref 49152 \
       u32 match u8 0 0 action mirred egress mirror dev bar2
     Error: cls_u32: Key node flags do not match passed flags.
     We have an error talking to the kernel, -1
    
    The error comes from u32_change() when comparing new and
    existing flags. The existing ones always contains one of
    TCA_CLS_FLAGS_{,NOT}_IN_HW flag depending on offloading state.
    These flags cannot be passed from userspace so the condition
    (n->flags != flags) in u32_change() always fails.
    
    Fix the condition so the flags TCA_CLS_FLAGS_NOT_IN_HW and
    TCA_CLS_FLAGS_IN_HW are not taken into account.
    
    Fixes: 24d3dc6d27ea ("net/sched: cls_u32: Reflect HW offload status")
    Signed-off-by: Ivan Vecera <ivecera@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a01550d778a4dd00bfcc548f2bfd57184192cd32
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Feb 22 19:45:27 2018 -0800

    net_sched: gen_estimator: fix broken estimators based on percpu stats
    
    
    [ Upstream commit a5f7add332b4ea6d4b9480971b3b0f5e66466ae9 ]
    
    pfifo_fast got percpu stats lately, uncovering a bug I introduced last
    year in linux-4.10.
    
    I missed the fact that we have to clear our temporary storage
    before calling __gnet_stats_copy_basic() in the case of percpu stats.
    
    Without this fix, rate estimators (tc qd replace dev xxx root est 1sec
    4sec pfifo_fast) are utterly broken.
    
    Fixes: 1c0d32fde5bd ("net_sched: gen_estimator: complete rewrite of rate estimators")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5b5be45ed1f283bd4d9eeef93ac4491df25d6c92
Author: Inbar Karmy <inbark@mellanox.com>
Date:   Thu Dec 7 17:26:33 2017 +0200

    net/mlx5e: Fix loopback self test when GRO is off
    
    
    [ Upstream commit ef7a3518f7dd4f4cf5e5b5358c93d1eb78df28fb ]
    
    When GRO is off, the transport header pointer in sk_buff is
    initialized to network's header.
    
    To find the udp header, instead of using udp_hdr() which assumes
    skb_network_header was set, manually calculate the udp header offset.
    
    Fixes: 0952da791c97 ("net/mlx5e: Add support for loopback selftest")
    Signed-off-by: Inbar Karmy <inbark@mellanox.com>
    Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ff01f118d1682aa3bc2a2e0459cd3ce127ffde22
Author: Tonghao Zhang <xiangxia.m.yue@gmail.com>
Date:   Sun Feb 4 18:07:10 2018 -0800

    doc: Change the min default value of tcp_wmem/tcp_rmem.
    
    
    [ Upstream commit a61a86f8db92923a2a4c857c49a795bcae754497 ]
    
    The SK_MEM_QUANTUM was changed from PAGE_SIZE to 4096. And the
    tcp_wmem/tcp_rmem min default values are 4096.
    
    Fixes: bd68a2a854ad ("net: set SK_MEM_QUANTUM to 4096")
    Cc: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d6a76199e85168160a58c827c30e58dae7570413
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 21 06:43:03 2018 -0800

    tcp_bbr: better deal with suboptimal GSO
    
    
    [ Upstream commit 350c9f484bde93ef229682eedd98cd5f74350f7f ]
    
    BBR uses tcp_tso_autosize() in an attempt to probe what would be the
    burst sizes and to adjust cwnd in bbr_target_cwnd() with following
    gold formula :
    
    /* Allow enough full-sized skbs in flight to utilize end systems. */
    cwnd += 3 * bbr->tso_segs_goal;
    
    But GSO can be lacking or be constrained to very small
    units (ip link set dev ... gso_max_segs 2)
    
    What we really want is to have enough packets in flight so that both
    GSO and GRO are efficient.
    
    So in the case GSO is off or downgraded, we still want to have the same
    number of packets in flight as if GSO/TSO was fully operational, so
    that GRO can hopefully be working efficiently.
    
    To fix this issue, we make tcp_tso_autosize() unaware of
    sk->sk_gso_max_segs
    
    Only tcp_tso_segs() has to enforce the gso_max_segs limit.
    
    Tested:
    
    ethtool -K eth0 tso off gso off
    tc qd replace dev eth0 root pfifo_fast
    
    Before patch:
    for f in {1..5}; do ./super_netperf 1 -H lpaa24 -- -K bbr; done
        691  (ss -temoi shows cwnd is stuck around 6 )
        667
        651
        631
        517
    
    After patch :
    # for f in {1..5}; do ./super_netperf 1 -H lpaa24 -- -K bbr; done
       1733 (ss -temoi shows cwnd is around 386 )
       1778
       1746
       1781
       1718
    
    Fixes: 0f8782ea1497 ("tcp_bbr: add BBR congestion control")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: Oleksandr Natalenko <oleksandr@natalenko.name>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f0a04a0e1ab48ba7089f9476dcf22ce00cf7b9e9
Author: David Howells <dhowells@redhat.com>
Date:   Thu Feb 22 14:38:14 2018 +0000

    rxrpc: Fix send in rxrpc_send_data_packet()
    
    
    [ Upstream commit 93c62c45ed5fad1b87e3a45835b251cd68de9c46 ]
    
    All the kernel_sendmsg() calls in rxrpc_send_data_packet() need to send
    both parts of the iov[] buffer, but one of them does not.  Fix it so that
    it does.
    
    Without this, short IPv6 rxrpc DATA packets may be seen that have the rxrpc
    header included, but no payload.
    
    Fixes: 5a924b8951f8 ("rxrpc: Don't store the rxrpc header in the Tx queue sk_buffs")
    Reported-by: Marc Dionne <marc.dionne@auristor.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 17634603d494978f5bf3ce9f261862c8f119af36
Author: Ilya Lesokhin <ilyal@mellanox.com>
Date:   Mon Feb 12 12:57:04 2018 +0200

    tcp: Honor the eor bit in tcp_mtu_probe
    
    
    [ Upstream commit 808cf9e38cd7923036a99f459ccc8cf2955e47af ]
    
    Avoid SKB coalescing if eor bit is set in one of the relevant
    SKBs.
    
    Fixes: c134ecb87817 ("tcp: Make use of MSG_EOR in tcp_sendmsg")
    Signed-off-by: Ilya Lesokhin <ilyal@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit dcb5da20ee3fdeb06dadb53c0102642d0a27ad23
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Thu Feb 8 21:01:48 2018 +0100

    net: phy: fix phy_start to consider PHY_IGNORE_INTERRUPT
    
    
    [ Upstream commit 08f5138512180a479ce6b9d23b825c9f4cd3be77 ]
    
    This condition wasn't adjusted when PHY_IGNORE_INTERRUPT (-2) was added
    long ago. In case of PHY_IGNORE_INTERRUPT the MAC interrupt indicates
    also PHY state changes and we should do what the symbol says.
    
    Fixes: 84a527a41f38 ("net: phylib: fix interrupts re-enablement in phy_start")
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f26693d38760e5714cd12c091a21c8e95f224c44
Author: Gal Pressman <galp@mellanox.com>
Date:   Thu Jan 25 18:00:41 2018 +0200

    net/mlx5e: Specify numa node when allocating drop rq
    
    
    [ Upstream commit 2f0db87901698cd73d828cc6fb1957b8916fc911 ]
    
    When allocating a drop rq, no numa node is explicitly set which means
    allocations are done on node zero. This is not necessarily the nearest
    numa node to the HCA, and even worse, might even be a memoryless numa
    node.
    
    Choose the numa_node given to us by the pci device in order to properly
    allocate the coherent dma memory instead of assuming zero is valid.
    
    Fixes: 556dd1b9c313 ("net/mlx5e: Set drop RQ's necessary parameters only")
    Signed-off-by: Gal Pressman <galp@mellanox.com>
    Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2229dd5dd6c6d55465e197e77bfcd605d9bea475
Author: Shalom Toledo <shalomt@mellanox.com>
Date:   Thu Mar 1 11:37:05 2018 +0100

    mlxsw: spectrum_switchdev: Check success of FDB add operation
    
    
    [ Upstream commit 0a8a1bf17e3af34f1f8d2368916a6327f8b3bfd5 ]
    
    Until now, we assumed that in case of error when adding FDB entries, the
    write operation will fail, but this is not the case. Instead, we need to
    check that the number of entries reported in the response is equal to
    the number of entries specified in the request.
    
    Fixes: 56ade8fe3fe1 ("mlxsw: spectrum: Add initial support for Spectrum ASIC")
    Reported-by: Ido Schimmel <idosch@mellanox.com>
    Signed-off-by: Shalom Toledo <shalomt@mellanox.com>
    Reviewed-by: Ido Schimmel <idosch@mellanox.com>
    Signed-off-by: Jiri Pirko <jiri@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9f02a069bfdda6dcb5970cfe7ebab50859f58127
Author: Tommi Rantala <tommi.t.rantala@nokia.com>
Date:   Mon Feb 5 21:48:14 2018 +0200

    sctp: fix dst refcnt leak in sctp_v4_get_dst
    
    
    [ Upstream commit 4a31a6b19f9ddf498c81f5c9b089742b7472a6f8 ]
    
    Fix dst reference count leak in sctp_v4_get_dst() introduced in commit
    410f03831 ("sctp: add routing output fallback"):
    
    When walking the address_list, successive ip_route_output_key() calls
    may return the same rt->dst with the reference incremented on each call.
    
    The code would not decrement the dst refcount when the dst pointer was
    identical from the previous iteration, causing the dst refcnt leak.
    
    Testcase:
      ip netns add TEST
      ip netns exec TEST ip link set lo up
      ip link add dummy0 type dummy
      ip link add dummy1 type dummy
      ip link add dummy2 type dummy
      ip link set dev dummy0 netns TEST
      ip link set dev dummy1 netns TEST
      ip link set dev dummy2 netns TEST
      ip netns exec TEST ip addr add 192.168.1.1/24 dev dummy0
      ip netns exec TEST ip link set dummy0 up
      ip netns exec TEST ip addr add 192.168.1.2/24 dev dummy1
      ip netns exec TEST ip link set dummy1 up
      ip netns exec TEST ip addr add 192.168.1.3/24 dev dummy2
      ip netns exec TEST ip link set dummy2 up
      ip netns exec TEST sctp_test -H 192.168.1.2 -P 20002 -h 192.168.1.1 -p 20000 -s -B 192.168.1.3
      ip netns del TEST
    
    In 4.4 and 4.9 kernels this results to:
      [  354.179591] unregister_netdevice: waiting for lo to become free. Usage count = 1
      [  364.419674] unregister_netdevice: waiting for lo to become free. Usage count = 1
      [  374.663664] unregister_netdevice: waiting for lo to become free. Usage count = 1
      [  384.903717] unregister_netdevice: waiting for lo to become free. Usage count = 1
      [  395.143724] unregister_netdevice: waiting for lo to become free. Usage count = 1
      [  405.383645] unregister_netdevice: waiting for lo to become free. Usage count = 1
      ...
    
    Fixes: 410f03831 ("sctp: add routing output fallback")
    Fixes: 0ca50d12f ("sctp: fix src address selection if using secondary addresses")
    Signed-off-by: Tommi Rantala <tommi.t.rantala@nokia.com>
    Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Acked-by: Neil Horman <nhorman@tuxdriver.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bf014cc18a3c963f5cc32453b28bf23387c7b975
Author: Gal Pressman <galp@mellanox.com>
Date:   Wed Dec 20 08:48:24 2017 +0200

    net/mlx5e: Fix TCP checksum in LRO buffers
    
    
    [ Upstream commit 8babd44d2079079f9d5a4aca7005aed80236efe0 ]
    
    When receiving an LRO packet, the checksum field is set by the hardware
    to the checksum of the first coalesced packet. Obviously, this checksum
    is not valid for the merged LRO packet and should be fixed.  We can use
    the CQE checksum which covers the checksum of the entire merged packet
    TCP payload to help us calculate the checksum incrementally.
    
    Tested by sending IPv4/6 traffic with LRO enabled, RX checksum disabled
    and watching nstat checksum error counters (in addition to the obvious
    bandwidth drop caused by checksum errors).
    
    This bug is usually "hidden" since LRO packets would go through the
    CHECKSUM_UNNECESSARY flow which does not validate the packet checksum.
    
    It's important to note that previous to this patch, LRO packets provided
    with CHECKSUM_UNNECESSARY are indeed packets with a correct validated
    checksum (even though the checksum inside the TCP header is incorrect),
    since the hardware LRO aggregation is terminated upon receiving a packet
    with bad checksum.
    
    Fixes: e586b3b0baee ("net/mlx5: Ethernet Datapath files")
    Signed-off-by: Gal Pressman <galp@mellanox.com>
    Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fecb84a83f846900b5d553ddf998e889c47a890b
Author: Alexey Kodanev <alexey.kodanev@oracle.com>
Date:   Thu Feb 15 20:18:43 2018 +0300

    udplite: fix partial checksum initialization
    
    
    [ Upstream commit 15f35d49c93f4fa9875235e7bf3e3783d2dd7a1b ]
    
    Since UDP-Lite is always using checksum, the following path is
    triggered when calculating pseudo header for it:
    
      udp4_csum_init() or udp6_csum_init()
        skb_checksum_init_zero_check()
          __skb_checksum_validate_complete()
    
    The problem can appear if skb->len is less than CHECKSUM_BREAK. In
    this particular case __skb_checksum_validate_complete() also invokes
    __skb_checksum_complete(skb). If UDP-Lite is using partial checksum
    that covers only part of a packet, the function will return bad
    checksum and the packet will be dropped.
    
    It can be fixed if we skip skb_checksum_init_zero_check() and only
    set the required pseudo header checksum for UDP-Lite with partial
    checksum before udp4_csum_init()/udp6_csum_init() functions return.
    
    Fixes: ed70fcfcee95 ("net: Call skb_checksum_init in IPv4")
    Fixes: e4f45b7f40bd ("net: Call skb_checksum_init in IPv6")
    Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1fc74a57a8ae863c95afedef2510e7e42b194e56
Author: Alexey Kodanev <alexey.kodanev@oracle.com>
Date:   Fri Feb 9 17:35:23 2018 +0300

    sctp: verify size of a new chunk in _sctp_make_chunk()
    
    
    [ Upstream commit 07f2c7ab6f8d0a7e7c5764c4e6cc9c52951b9d9c ]
    
    When SCTP makes INIT or INIT_ACK packet the total chunk length
    can exceed SCTP_MAX_CHUNK_LEN which leads to kernel panic when
    transmitting these packets, e.g. the crash on sending INIT_ACK:
    
    [  597.804948] skbuff: skb_over_panic: text:00000000ffae06e4 len:120168
                   put:120156 head:000000007aa47635 data:00000000d991c2de
                   tail:0x1d640 end:0xfec0 dev:<NULL>
    ...
    [  597.976970] ------------[ cut here ]------------
    [  598.033408] kernel BUG at net/core/skbuff.c:104!
    [  600.314841] Call Trace:
    [  600.345829]  <IRQ>
    [  600.371639]  ? sctp_packet_transmit+0x2095/0x26d0 [sctp]
    [  600.436934]  skb_put+0x16c/0x200
    [  600.477295]  sctp_packet_transmit+0x2095/0x26d0 [sctp]
    [  600.540630]  ? sctp_packet_config+0x890/0x890 [sctp]
    [  600.601781]  ? __sctp_packet_append_chunk+0x3b4/0xd00 [sctp]
    [  600.671356]  ? sctp_cmp_addr_exact+0x3f/0x90 [sctp]
    [  600.731482]  sctp_outq_flush+0x663/0x30d0 [sctp]
    [  600.788565]  ? sctp_make_init+0xbf0/0xbf0 [sctp]
    [  600.845555]  ? sctp_check_transmitted+0x18f0/0x18f0 [sctp]
    [  600.912945]  ? sctp_outq_tail+0x631/0x9d0 [sctp]
    [  600.969936]  sctp_cmd_interpreter.isra.22+0x3be1/0x5cb0 [sctp]
    [  601.041593]  ? sctp_sf_do_5_1B_init+0x85f/0xc30 [sctp]
    [  601.104837]  ? sctp_generate_t1_cookie_event+0x20/0x20 [sctp]
    [  601.175436]  ? sctp_eat_data+0x1710/0x1710 [sctp]
    [  601.233575]  sctp_do_sm+0x182/0x560 [sctp]
    [  601.284328]  ? sctp_has_association+0x70/0x70 [sctp]
    [  601.345586]  ? sctp_rcv+0xef4/0x32f0 [sctp]
    [  601.397478]  ? sctp6_rcv+0xa/0x20 [sctp]
    ...
    
    Here the chunk size for INIT_ACK packet becomes too big, mostly
    because of the state cookie (INIT packet has large size with
    many address parameters), plus additional server parameters.
    
    Later this chunk causes the panic in skb_put_data():
    
      skb_packet_transmit()
          sctp_packet_pack()
              skb_put_data(nskb, chunk->skb->data, chunk->skb->len);
    
    'nskb' (head skb) was previously allocated with packet->size
    from u16 'chunk->chunk_hdr->length'.
    
    As suggested by Marcelo we should check the chunk's length in
    _sctp_make_chunk() before trying to allocate skb for it and
    discard a chunk if its size bigger than SCTP_MAX_CHUNK_LEN.
    
    Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
    Acked-by: Marcelo Ricardo Leitner <marcelo.leinter@gmail.com>
    Acked-by: Neil Horman <nhorman@tuxdriver.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5775f78764675d49dc6d8a8ad66ce3843810d4a2
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Fri Mar 2 18:41:16 2018 +0100

    ppp: prevent unregistered channels from connecting to PPP units
    
    
    [ Upstream commit 77f840e3e5f09c6d7d727e85e6e08276dd813d11 ]
    
    PPP units don't hold any reference on the channels connected to it.
    It is the channel's responsibility to ensure that it disconnects from
    its unit before being destroyed.
    In practice, this is ensured by ppp_unregister_channel() disconnecting
    the channel from the unit before dropping a reference on the channel.
    
    However, it is possible for an unregistered channel to connect to a PPP
    unit: register a channel with ppp_register_net_channel(), attach a
    /dev/ppp file to it with ioctl(PPPIOCATTCHAN), unregister the channel
    with ppp_unregister_channel() and finally connect the /dev/ppp file to
    a PPP unit with ioctl(PPPIOCCONNECT).
    
    Once in this situation, the channel is only held by the /dev/ppp file,
    which can be released at anytime and free the channel without letting
    the parent PPP unit know. Then the ppp structure ends up with dangling
    pointers in its ->channels list.
    
    Prevent this scenario by forbidding unregistered channels from
    connecting to PPP units. This maintains the code logic by keeping
    ppp_unregister_channel() responsible from disconnecting the channel if
    necessary and avoids modification on the reference counting mechanism.
    
    This issue seems to predate git history (successfully reproduced on
    Linux 2.6.26 and earlier PPP commits are unrelated).
    
    Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 795f3deff199e944bebbf04d577033363c335c44
Author: Roman Kapl <code@rkapl.cz>
Date:   Mon Feb 19 21:32:51 2018 +0100

    net: sched: report if filter is too large to dump
    
    
    [ Upstream commit 5ae437ad5a2ed573b1ebb04e0afa70b8869f88dd ]
    
    So far, if the filter was too large to fit in the allocated skb, the
    kernel did not return any error and stopped dumping. Modify the dumper
    so that it returns -EMSGSIZE when a filter fails to dump and it is the
    first filter in the skb. If we are not first, we will get a next chance
    with more room.
    
    I understand this is pretty near to being an API change, but the
    original design (silent truncation) can be considered a bug.
    
    Note: The error case can happen pretty easily if you create a filter
    with 32 actions and have 4kb pages. Also recent versions of iproute try
    to be clever with their buffer allocation size, which in turn leads to
    
    Signed-off-by: Roman Kapl <code@rkapl.cz>
    Acked-by: Jiri Pirko <jiri@mellanox.com>
    Acked-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 60b28d5ef3e3880a180bdbf69a3956fcb33d6e99
Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Date:   Tue Feb 6 14:48:32 2018 +0100

    netlink: ensure to loop over all netns in genlmsg_multicast_allns()
    
    
    [ Upstream commit cb9f7a9a5c96a773bbc9c70660dc600cfff82f82 ]
    
    Nowadays, nlmsg_multicast() returns only 0 or -ESRCH but this was not the
    case when commit 134e63756d5f was pushed.
    However, there was no reason to stop the loop if a netns does not have
    listeners.
    Returns -ESRCH only if there was no listeners in all netns.
    
    To avoid having the same problem in the future, I didn't take the
    assumption that nlmsg_multicast() returns only 0 or -ESRCH.
    
    Fixes: 134e63756d5f ("genetlink: make netns aware")
    CC: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3bcf69f8e7869e00babd3cc11f8c3acca9f79cc9
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Mon Feb 26 16:13:43 2018 +0100

    net: ipv4: don't allow setting net.ipv4.route.min_pmtu below 68
    
    
    [ Upstream commit c7272c2f1229125f74f22dcdd59de9bbd804f1c8 ]
    
    According to RFC 1191 sections 3 and 4, ICMP frag-needed messages
    indicating an MTU below 68 should be rejected:
    
        A host MUST never reduce its estimate of the Path MTU below 68
        octets.
    
    and (talking about ICMP frag-needed's Next-Hop MTU field):
    
        This field will never contain a value less than 68, since every
        router "must be able to forward a datagram of 68 octets without
        fragmentation".
    
    Furthermore, by letting net.ipv4.route.min_pmtu be set to negative
    values, we can end up with a very large PMTU when (-1) is cast into u32.
    
    Let's also make ip_rt_min_pmtu a u32, since it's only ever compared to
    unsigned ints.
    
    Reported-by: Jianlin Shi <jishi@redhat.com>
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f80c28a585b57bfc0c33cfac2a10b0c93eede575
Author: Jakub Kicinski <jakub.kicinski@netronome.com>
Date:   Mon Feb 12 21:35:31 2018 -0800

    net: fix race on decreasing number of TX queues
    
    
    [ Upstream commit ac5b70198adc25c73fba28de4f78adcee8f6be0b ]
    
    netif_set_real_num_tx_queues() can be called when netdev is up.
    That usually happens when user requests change of number of
    channels/rings with ethtool -L.  The procedure for changing
    the number of queues involves resetting the qdiscs and setting
    dev->num_tx_queues to the new value.  When the new value is
    lower than the old one, extra care has to be taken to ensure
    ordering of accesses to the number of queues vs qdisc reset.
    
    Currently the queues are reset before new dev->num_tx_queues
    is assigned, leaving a window of time where packets can be
    enqueued onto the queues going down, leading to a likely
    crash in the drivers, since most drivers don't check if TX
    skbs are assigned to an active queue.
    
    Fixes: e6484930d7c7 ("net: allocate tx queues in register_netdevice")
    Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit da260080c2e3a80c4b3c70ec6846011137373f2d
Author: Grygorii Strashko <grygorii.strashko@ti.com>
Date:   Tue Feb 6 19:17:06 2018 -0600

    net: ethernet: ti: cpsw: fix net watchdog timeout
    
    
    [ Upstream commit 62f94c2101f35cd45775df00ba09bde77580e26a ]
    
    It was discovered that simple program which indefinitely sends 200b UDP
    packets and runs on TI AM574x SoC (SMP) under RT Kernel triggers network
    watchdog timeout in TI CPSW driver (<6 hours run). The network watchdog
    timeout is triggered due to race between cpsw_ndo_start_xmit() and
    cpsw_tx_handler() [NAPI]
    
    cpsw_ndo_start_xmit()
            if (unlikely(!cpdma_check_free_tx_desc(txch))) {
                    txq = netdev_get_tx_queue(ndev, q_idx);
                    netif_tx_stop_queue(txq);
    
    ^^ as per [1] barier has to be used after set_bit() otherwise new value
    might not be visible to other cpus
            }
    
    cpsw_tx_handler()
            if (unlikely(netif_tx_queue_stopped(txq)))
                    netif_tx_wake_queue(txq);
    
    and when it happens ndev TX queue became disabled forever while driver's HW
    TX queue is empty.
    
    Fix this, by adding smp_mb__after_atomic() after netif_tx_stop_queue()
    calls and double check for free TX descriptors after stopping ndev TX queue
    - if there are free TX descriptors wake up ndev TX queue.
    
    [1] https://www.kernel.org/doc/html/latest/core-api/atomic_ops.html
    Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
    Reviewed-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 94870df33c9bf52a9be3ed750670520aad43a44e
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Mon Feb 5 21:10:01 2018 +0100

    net: amd-xgbe: fix comparison to bitshift when dealing with a mask
    
    
    [ Upstream commit a3276892db7a588bedc33168e502572008f714a9 ]
    
    Due to a typo, the mask was destroyed by a comparison instead of a bit
    shift.
    
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c3d7d3a099f69277858499adc67cd318a54b030d
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Thu Feb 22 16:55:34 2018 +0100

    ipv6 sit: work around bogus gcc-8 -Wrestrict warning
    
    
    [ Upstream commit ca79bec237f5809a7c3c59bd41cd0880aa889966 ]
    
    gcc-8 has a new warning that detects overlapping input and output arguments
    in memcpy(). It triggers for sit_init_net() calling ipip6_tunnel_clone_6rd(),
    which is actually correct:
    
    net/ipv6/sit.c: In function 'sit_init_net':
    net/ipv6/sit.c:192:3: error: 'memcpy' source argument is the same as destination [-Werror=restrict]
    
    The problem here is that the logic detecting the memcpy() arguments finds them
    to be the same, but the conditional that tests for the input and output of
    ipip6_tunnel_clone_6rd() to be identical is not a compile-time constant.
    
    We know that netdev_priv(t->dev) is the same as t for a tunnel device,
    and comparing "dev" directly here lets the compiler figure out as well
    that 'dev == sitn->fb_tunnel_dev' when called from sit_init_net(), so
    it no longer warns.
    
    This code is old, so Cc stable to make sure that we don't get the warning
    for older kernels built with new gcc.
    
    Cc: Martin Sebor <msebor@gmail.com>
    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83456
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2cdc12a498fc701ef5468004b7d51dd0d81e81e8
Author: Denis Du <dudenis2000@yahoo.ca>
Date:   Sat Feb 24 16:51:42 2018 -0500

    hdlc_ppp: carrier detect ok, don't turn off negotiation
    
    
    [ Upstream commit b6c3bad1ba83af1062a7ff6986d9edc4f3d7fc8e ]
    
    Sometimes when physical lines have a just good noise to make the protocol
    handshaking fail, but the carrier detect still good. Then after remove of
    the noise, nobody will trigger this protocol to be start again to cause
    the link to never come back. The fix is when the carrier is still on, not
    terminate the protocol handshaking.
    
    Signed-off-by: Denis Du <dudenis2000@yahoo.ca>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4a5048e7fdebe3dd48283ce0c46175f52961269f
Author: Stefano Brivio <sbrivio@redhat.com>
Date:   Thu Feb 15 09:46:03 2018 +0100

    fib_semantics: Don't match route with mismatching tclassid
    
    
    [ Upstream commit a8c6db1dfd1b1d18359241372bb204054f2c3174 ]
    
    In fib_nh_match(), if output interface or gateway are passed in
    the FIB configuration, we don't have to check next hops of
    multipath routes to conclude whether we have a match or not.
    
    However, we might still have routes with different realms
    matching the same output interface and gateway configuration,
    and this needs to cause the match to fail. Otherwise the first
    route inserted in the FIB will match, regardless of the realms:
    
     # ip route add 1.1.1.1 dev eth0 table 1234 realms 1/2
     # ip route append 1.1.1.1 dev eth0 table 1234 realms 3/4
     # ip route list table 1234
     1.1.1.1 dev eth0 scope link realms 1/2
     1.1.1.1 dev eth0 scope link realms 3/4
     # ip route del 1.1.1.1 dev ens3 table 1234 realms 3/4
     # ip route list table 1234
     1.1.1.1 dev ens3 scope link realms 3/4
    
    whereas route with realms 3/4 should have been deleted instead.
    
    Explicitly check for fc_flow passed in the FIB configuration
    (this comes from RTA_FLOW extracted by rtm_to_fib_config()) and
    fail matching if it differs from nh_tclassid.
    
    The handling of RTA_FLOW for multipath routes later in
    fib_nh_match() is still needed, as we can have multiple RTA_FLOW
    attributes that need to be matched against the tclassid of each
    next hop.
    
    v2: Check that fc_flow is set before discarding the match, so
        that the user can still select the first matching rule by
        not specifying any realm, as suggested by David Ahern.
    
    Reported-by: Jianlin Shi <jishi@redhat.com>
    Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
    Acked-by: David Ahern <dsahern@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4c13e689e5f0f997d4cc8ee4646fcae88c16d737
Author: Xin Long <lucien.xin@gmail.com>
Date:   Mon Feb 12 17:15:40 2018 +0800

    bridge: check brport attr show in brport_show
    
    
    [ Upstream commit 1b12580af1d0677c3c3a19e35bfe5d59b03f737f ]
    
    Now br_sysfs_if file flush doesn't have attr show. To read it will
    cause kernel panic after users chmod u+r this file.
    
    Xiong found this issue when running the commands:
    
      ip link add br0 type bridge
      ip link add type veth
      ip link set veth0 master br0
      chmod u+r /sys/devices/virtual/net/veth0/brport/flush
      timeout 3 cat /sys/devices/virtual/net/veth0/brport/flush
    
    kernel crashed with NULL a pointer dereference call trace.
    
    This patch is to fix it by return -EINVAL when brport_attr->show
    is null, just the same as the check for brport_attr->store in
    brport_store().
    
    Fixes: 9cf637473c85 ("bridge: add sysfs hook to flush forwarding table")
    Reported-by: Xiong Zhou <xzhou@redhat.com>
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 71978491bb6600d39ef68f421c23aeb11c10053f
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Wed Feb 28 21:14:26 2018 +0100

    x86/cpu_entry_area: Sync cpu_entry_area to initial_page_table
    
    commit 945fd17ab6bab8a4d05da6c3170519fbcfe62ddb upstream.
    
    The separation of the cpu_entry_area from the fixmap missed the fact that
    on 32bit non-PAE kernels the cpu_entry_area mapping might not be covered in
    initial_page_table by the previous synchronizations.
    
    This results in suspend/resume failures because 32bit utilizes initial page
    table for resume. The absence of the cpu_entry_area mapping results in a
    triple fault, aka. insta reboot.
    
    With PAE enabled this works by chance because the PGD entry which covers
    the fixmap and other parts incindentally provides the cpu_entry_area
    mapping as well.
    
    Synchronize the initial page table after setting up the cpu entry
    area. Instead of adding yet another copy of the same code, move it to a
    function and invoke it from the various places.
    
    It needs to be investigated if the existing calls in setup_arch() and
    setup_per_cpu_areas() can be replaced by the later invocation from
    setup_cpu_entry_areas(), but that's beyond the scope of this fix.
    
    Fixes: 92a0f81d8957 ("x86/cpu_entry_area: Move it out of the fixmap")
    Reported-by: Woody Suwalski <terraluna977@gmail.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Woody Suwalski <terraluna977@gmail.com>
    Cc: William Grant <william.grant@canonical.com>
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/alpine.DEB.2.21.1802282137290.1392@nanos.tec.linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f70befc397a69504c9219600ae4803007cb276cf
Author: Sebastian Panceac <sebastian@resin.io>
Date:   Wed Feb 28 11:40:49 2018 +0200

    x86/platform/intel-mid: Handle Intel Edison reboot correctly
    
    commit 028091f82eefd5e84f81cef81a7673016ecbe78b upstream.
    
    When the Intel Edison module is powered with 3.3V, the reboot command makes
    the module stuck.  If the module is powered at a greater voltage, like 4.4V
    (as the Edison Mini Breakout board does), reboot works OK.
    
    The official Intel Edison BSP sends the IPCMSG_COLD_RESET message to the
    SCU by default. The IPCMSG_COLD_BOOT which is used by the upstream kernel
    is only sent when explicitely selected on the kernel command line.
    
    Use IPCMSG_COLD_RESET unconditionally which makes reboot work independent
    of the power supply voltage.
    
    [ tglx: Massaged changelog ]
    
    Fixes: bda7b072de99 ("x86/platform/intel-mid: Implement power off sequence")
    Signed-off-by: Sebastian Panceac <sebastian@resin.io>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/1519810849-15131-1-git-send-email-sebastian@resin.io
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e521a723fd3fc843c9e886f1768563a043ce3248
Author: Juergen Gross <jgross@suse.com>
Date:   Mon Feb 26 15:08:18 2018 +0100

    x86/xen: Zero MSR_IA32_SPEC_CTRL before suspend
    
    commit 71c208dd54ab971036d83ff6d9837bae4976e623 upstream.
    
    Older Xen versions (4.5 and before) might have problems migrating pv
    guests with MSR_IA32_SPEC_CTRL having a non-zero value. So before
    suspending zero that MSR and restore it after being resumed.
    
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>
    Cc: stable@vger.kernel.org
    Cc: xen-devel@lists.xenproject.org
    Cc: boris.ostrovsky@oracle.com
    Link: https://lkml.kernel.org/r/20180226140818.4849-1-jgross@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 93e1f7fc77e68bf5f1997b08a0f6e54dc71e0da5
Author: Jan Kara <jack@suse.cz>
Date:   Mon Feb 26 12:51:43 2018 +0100

    direct-io: Fix sleep in atomic due to sync AIO
    
    commit d9c10e5b8863cfb6886d1640386455075c6e979d upstream.
    
    Commit e864f39569f4 "fs: add RWF_DSYNC aand RWF_SYNC" added additional
    way for direct IO to become synchronous and thus trigger fsync from the
    IO completion handler. Then commit 9830f4be159b "fs: Use RWF_* flags for
    AIO operations" allowed these flags to be set for AIO as well. However
    that commit forgot to update the condition checking whether the IO
    completion handling should be defered to a workqueue and thus AIO DIO
    with RWF_[D]SYNC set will call fsync() from IRQ context resulting in
    sleep in atomic.
    
    Fix the problem by checking directly iocb flags (the same way as it is
    done in dio_complete()) instead of checking all conditions that could
    lead to IO being synchronous.
    
    CC: Christoph Hellwig <hch@lst.de>
    CC: Goldwyn Rodrigues <rgoldwyn@suse.com>
    CC: stable@vger.kernel.org
    Reported-by: Mark Rutland <mark.rutland@arm.com>
    Tested-by: Mark Rutland <mark.rutland@arm.com>
    Fixes: 9830f4be159b29399d107bffb99e0132bc5aedd4
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0ba6c33b3287e469622c0ccb2658052661bac579
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Wed Feb 21 17:08:01 2018 -0800

    dax: fix vma_is_fsdax() helper
    
    commit 230f5a8969d8345fc9bbe3683f068246cf1be4b8 upstream.
    
    Gerd reports that ->i_mode may contain other bits besides S_IFCHR. Use
    S_ISCHR() instead. Otherwise, get_user_pages_longterm() may fail on
    device-dax instances when those are meant to be explicitly allowed.
    
    Fixes: 2bb6d2837083 ("mm: introduce get_user_pages_longterm")
    Cc: <stable@vger.kernel.org>
    Reported-by: Gerd Rausch <gerd.rausch@oracle.com>
    Acked-by: Jane Chu <jane.chu@oracle.com>
    Reported-by: Haozhong Zhang <haozhong.zhang@intel.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3379a37a740932ac7661633a5db21c6ccd59f9b4
Author: Viresh Kumar <viresh.kumar@linaro.org>
Date:   Fri Feb 23 09:38:28 2018 +0530

    cpufreq: s3c24xx: Fix broken s3c_cpufreq_init()
    
    commit 0373ca74831b0f93cd4cdbf7ad3aec3c33a479a5 upstream.
    
    commit a307a1e6bc0d "cpufreq: s3c: use cpufreq_generic_init()"
    accidentally broke cpufreq on s3c2410 and s3c2412.
    
    These two platforms don't have a CPU frequency table and used to skip
    calling cpufreq_table_validate_and_show() for them.  But with the
    above commit, we started calling it unconditionally and that will
    eventually fail as the frequency table pointer is NULL.
    
    Fix this by calling cpufreq_table_validate_and_show() conditionally
    again.
    
    Fixes: a307a1e6bc0d "cpufreq: s3c: use cpufreq_generic_init()"
    Cc: 3.13+ <stable@vger.kernel.org> # v3.13+
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d5168ce354349fb8e336c75cedc447921b81e6d3
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Sun Feb 4 10:34:02 2018 -0800

    vfio: disable filesystem-dax page pinning
    
    commit 94db151dc89262bfa82922c44e8320cea2334667 upstream.
    
    Filesystem-DAX is incompatible with 'longterm' page pinning. Without
    page cache indirection a DAX mapping maps filesystem blocks directly.
    This means that the filesystem must not modify a file's block map while
    any page in a mapping is pinned. In order to prevent the situation of
    userspace holding of filesystem operations indefinitely, disallow
    'longterm' Filesystem-DAX mappings.
    
    RDMA has the same conflict and the plan there is to add a 'with lease'
    mechanism to allow the kernel to notify userspace that the mapping is
    being torn down for block-map maintenance. Perhaps something similar can
    be put in place for vfio.
    
    Note that xfs and ext4 still report:
    
       "DAX enabled. Warning: EXPERIMENTAL, use at your own risk"
    
    ...at mount time, and resolving the dax-dma-vs-truncate problem is one
    of the last hurdles to remove that designation.
    
    Acked-by: Alex Williamson <alex.williamson@redhat.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: kvm@vger.kernel.org
    Cc: <stable@vger.kernel.org>
    Reported-by: Haozhong Zhang <haozhong.zhang@intel.com>
    Tested-by: Haozhong Zhang <haozhong.zhang@intel.com>
    Fixes: d475c6346a38 ("dax,ext2: replace XIP read and write with DAX I/O")
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7f43f610c4bb8e4da69923d0ce0c60a82073bf2c
Author: Ming Lei <ming.lei@redhat.com>
Date:   Fri Feb 23 23:36:57 2018 +0800

    block: kyber: fix domain token leak during requeue
    
    commit ba989a01469d027861e55c8f1121edadef757797 upstream.
    
    When requeuing request, the domain token should have been freed
    before re-inserting the request to io scheduler. Otherwise, the
    assigned domain token will be leaked, and IO hang can be caused.
    
    Cc: Paolo Valente <paolo.valente@linaro.org>
    Cc: Omar Sandoval <osandov@fb.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Bart Van Assche <bart.vanassche@wdc.com>
    Signed-off-by: Ming Lei <ming.lei@redhat.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 17644a0bbb190b6286106e98392f3d60ee020a23
Author: Jiufei Xue <jiufei.xue@linux.alibaba.com>
Date:   Tue Feb 27 20:10:03 2018 +0800

    block: fix the count of PGPGOUT for WRITE_SAME
    
    commit 7c5a0dcf557c6511a61e092ba887de28882fe857 upstream.
    
    The vm counters is counted in sectors, so we should do the conversation
    in submit_bio.
    
    Fixes: 74d46992e0d9 ("block: replace bi_bdev with a gendisk pointer and partitions index")
    Cc: stable@vger.kernel.org
    Reviewed-by: Omar Sandoval <osandov@fb.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Jiufei Xue <jiufei.xue@linux.alibaba.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit eae6179f55396f7ee708c7da1f9d84688412b62e
Author: Anand Jain <anand.jain@oracle.com>
Date:   Thu Feb 22 21:58:42 2018 +0800

    btrfs: use proper endianness accessors for super_copy
    
    commit 3c181c12c431fe33b669410d663beb9cceefcd1b upstream.
    
    The fs_info::super_copy is a byte copy of the on-disk structure and all
    members must use the accessor macros/functions to obtain the right
    value.  This was missing in update_super_roots and in sysfs readers.
    
    Moving between opposite endianness hosts will report bogus numbers in
    sysfs, and mount may fail as the root will not be restored correctly. If
    the filesystem is always used on a same endian host, this will not be a
    problem.
    
    Fix this by using the btrfs_set_super...() functions to set
    fs_info::super_copy values, and for the sysfs, use the cached
    fs_info::nodesize/sectorsize values.
    
    CC: stable@vger.kernel.org
    Fixes: df93589a17378 ("btrfs: export more from FS_INFO to sysfs")
    Signed-off-by: Anand Jain <anand.jain@oracle.com>
    Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    [ update changelog ]
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit dabf89052e8e1bea5f4cba2f4533e8718acdbdc9
Author: John David Anglin <dave.anglin@bell.net>
Date:   Tue Feb 27 08:16:07 2018 -0500

    parisc: Fix ordering of cache and TLB flushes
    
    commit 0adb24e03a124b79130c9499731936b11ce2677d upstream.
    
    The change to flush_kernel_vmap_range() wasn't sufficient to avoid the
    SMP stalls.  The problem is some drivers call these routines with
    interrupts disabled.  Interrupts need to be enabled for flush_tlb_all()
    and flush_cache_all() to work.  This version adds checks to ensure
    interrupts are not disabled before calling routines that need IPI
    interrupts.  When interrupts are disabled, we now drop into slower code.
    
    The attached change fixes the ordering of cache and TLB flushes in
    several cases.  When we flush the cache using the existing PTE/TLB
    entries, we need to flush the TLB after doing the cache flush.  We don't
    need to do this when we flush the entire instruction and data caches as
    these flushes don't use the existing TLB entries.  The same is true for
    tmpalias region flushes.
    
    The flush_kernel_vmap_range() and invalidate_kernel_vmap_range()
    routines have been updated.
    
    Secondly, we added a new purge_kernel_dcache_range_asm() routine to
    pacache.S and use it in invalidate_kernel_vmap_range().  Nominally,
    purges are faster than flushes as the cache lines don't have to be
    written back to memory.
    
    Hopefully, this is sufficient to resolve the remaining problems due to
    cache speculation.  So far, testing indicates that this is the case.  I
    did work up a patch using tmpalias flushes, but there is a performance
    hit because we need the physical address for each page, and we also need
    to sequence access to the tmpalias flush code.  This increases the
    probability of stalls.
    
    Signed-off-by: John David Anglin <dave.anglin@bell.net>
    Cc: stable@vger.kernel.org # 4.9+
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 47e7fc96cddca4d78498dd0e8da98ca018b2633b
Author: Helge Deller <deller@gmx.de>
Date:   Mon Feb 12 21:43:55 2018 +0100

    parisc: Reduce irq overhead when run in qemu
    
    commit 636a415bcc7f4fd020ece8fd5fc648c4cef19c34 upstream.
    
    When run under QEMU, calling mfctl(16) creates some overhead because the
    qemu timer has to be scaled and moved into the register. This patch
    reduces the number of calls to mfctl(16) by moving the calls out of the
    loops.
    
    Additionally, increase the minimal time interval to 8000 cycles instead
    of 500 to compensate possible QEMU delays when delivering interrupts.
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Cc: stable@vger.kernel.org # 4.14+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 90c3f0d36000dcddc0bf2b1b889784a8795cc4d6
Author: Helge Deller <deller@gmx.de>
Date:   Fri Jan 12 22:44:00 2018 +0100

    parisc: Use cr16 interval timers unconditionally on qemu
    
    commit 5ffa8518851f1401817c15d2a7eecc0373c26ff9 upstream.
    
    When running on qemu we know that the (emulated) cr16 cpu-internal
    clocks are syncronized. So let's use them unconditionally on qemu.
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Cc: stable@vger.kernel.org # 4.14+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6b218ed6bd07857422b13966678af6e6a3509d86
Author: Lingutla Chandrasekhar <clingutla@codeaurora.org>
Date:   Thu Jan 18 17:20:22 2018 +0530

    timers: Forward timer base before migrating timers
    
    commit c52232a49e203a65a6e1a670cd5262f59e9364a0 upstream.
    
    On CPU hotunplug the enqueued timers of the unplugged CPU are migrated to a
    live CPU. This happens from the control thread which initiated the unplug.
    
    If the CPU on which the control thread runs came out from a longer idle
    period then the base clock of that CPU might be stale because the control
    thread runs prior to any event which forwards the clock.
    
    In such a case the timers from the unplugged CPU are queued on the live CPU
    based on the stale clock which can cause large delays due to increased
    granularity of the outer timer wheels which are far away from base:;clock.
    
    But there is a worse problem than that. The following sequence of events
    illustrates it:
    
     - CPU0 timer1 is queued expires = 59969 and base->clk = 59131.
    
       The timer is queued at wheel level 2, with resulting expiry time = 60032
       (due to level granularity).
    
     - CPU1 enters idle @60007, with next timer expiry @60020.
    
     - CPU0 is hotplugged at @60009
    
     - CPU1 exits idle and runs the control thread which migrates the
       timers from CPU0
    
       timer1 is now queued in level 0 for immediate handling in the next
       softirq because the requested expiry time 59969 is before CPU1 base->clk
       60007
    
     - CPU1 runs code which forwards the base clock which succeeds because the
       next expiring timer. which was collected at idle entry time is still set
       to 60020.
    
       So it forwards beyond 60007 and therefore misses to expire the migrated
       timer1. That timer gets expired when the wheel wraps around again, which
       takes between 63 and 630ms depending on the HZ setting.
    
    Address both problems by invoking forward_timer_base() for the control CPUs
    timer base. All other places, which might run into a similar problem
    (mod_timer()/add_timer_on()) already invoke forward_timer_base() to avoid
    that.
    
    [ tglx: Massaged comment and changelog ]
    
    Fixes: a683f390b93f ("timers: Forward the wheel clock whenever possible")
    Co-developed-by: Neeraj Upadhyay <neeraju@codeaurora.org>
    Signed-off-by: Neeraj Upadhyay <neeraju@codeaurora.org>
    Signed-off-by: Lingutla Chandrasekhar <clingutla@codeaurora.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Anna-Maria Gleixner <anna-maria@linutronix.de>
    Cc: linux-arm-msm@vger.kernel.org
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/20180118115022.6368-1-clingutla@codeaurora.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ec274a65154a6cd86d7e67ecc5f0f34cd446b3ed
Author: Shawn Lin <shawn.lin@rock-chips.com>
Date:   Sat Feb 24 14:17:23 2018 +0800

    mmc: dw_mmc: Fix out-of-bounds access for slot's caps
    
    commit 0d84b9e5631d923744767dc6608672df906dd092 upstream.
    
    Add num_caps field for dw_mci_drv_data to validate the controller
    id from DT alias and non-DT ways.
    
    Reported-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
    Fixes: 800d78bfccb3 ("mmc: dw_mmc: add support for implementation specific callbacks")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e03d46a156d96cc87c57dea3192bbc72b250b4a2
Author: Shawn Lin <shawn.lin@rock-chips.com>
Date:   Sat Feb 24 14:17:22 2018 +0800

    mmc: dw_mmc: Factor out dw_mci_init_slot_caps
    
    commit a4faa4929ed3be15e2d500d2405f992f6dedc8eb upstream.
    
    Factor out dw_mci_init_slot_caps to consolidate parsing
    all differents types of capabilities from host contrllers.
    No functional change intended.
    
    Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
    Fixes: 800d78bfccb3 ("mmc: dw_mmc: add support for implementation specific callbacks")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4d5123a0b37cab76958bdd7d6d2c26a40ca52e7f
Author: Shawn Lin <shawn.lin@rock-chips.com>
Date:   Fri Feb 23 16:47:25 2018 +0800

    mmc: dw_mmc: Avoid accessing registers in runtime suspended state
    
    commit 5b43df8b4c1a7f0c3fbf793c9566068e6b1e570c upstream.
    
    cat /sys/kernel/debug/mmc0/regs will hang up the system since
    it's in runtime suspended state, so the genpd and biu_clk is
    off. This patch fixes this problem by calling pm_runtime_get_sync
    to wake it up before reading the registers.
    
    Fixes: e9ed8835e990 ("mmc: dw_mmc: add runtime PM callback")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
    Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cb65fc21f3877599e1c22710c5fdbefd0be010d4
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Fri Feb 23 13:44:19 2018 +0100

    mmc: dw_mmc-k3: Fix out-of-bounds access through DT alias
    
    commit 325501d9360eb42c7c51e6daa0d733844c1e790b upstream.
    
    The hs_timing_cfg[] array is indexed using a value derived from the
    "mshcN" alias in DT, which may lead to an out-of-bounds access.
    
    Fix this by adding a range check.
    
    Fixes: 361c7fe9b02eee7e ("mmc: dw_mmc-k3: add sd support for hi3660")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: Shawn Lin <shawn.lin@rock-chips.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 33b42aa617d16436ddbde6d192c6a6c2db566648
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Wed Feb 14 15:57:43 2018 +0200

    mmc: sdhci-pci: Fix S0i3 for Intel BYT-based controllers
    
    commit f8870ae6e2d6be75b1accc2db981169fdfbea7ab upstream.
    
    Tuning can leave the IP in an active state (Buffer Read Enable bit set)
    which prevents the entry to low power states (i.e. S0i3). Data reset will
    clear it.
    
    Generally tuning is followed by a data transfer which will anyway sort out
    the state, so it is rare that S0i3 is actually prevented.
    
    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 e2c3f727021883cf0903196ae2fd55355b98546e
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Feb 26 15:36:38 2018 +0100

    ALSA: hda - Fix pincfg at resume on Lenovo T470 dock
    
    commit 71db96ddfa72671bd43cacdcc99ca178d90ba267 upstream.
    
    We've added a quirk to enable the recent Lenovo dock support, where it
    overwrites the pin configs of NID 0x17 and 19, not only updating the
    pin config cache.  It works right after the boot, but the problem is
    that the pin configs are occasionally cleared when the machine goes to
    PM.  Meanwhile the quirk writes the pin configs only at the pre-probe,
    so this won't be applied any longer.
    
    For addressing that issue, this patch moves the code to overwrite the
    pin configs into HDA_FIXUP_ACT_INIT section so that it's always
    applied at both probe and resume time.
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=195161
    Fixes: 61fcf8ece9b6 ("ALSA: hda/realtek - Enable Thinkpad Dock device for ALC298 platform")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 34516912bfd726c530946f4b3a808caea8befe06
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Thu Feb 22 14:20:35 2018 +0100

    ALSA: hda: Add a power_save blacklist
    
    commit 1ba8f9d308174e647b864c36209b4d7934d99888 upstream.
    
    On some boards setting power_save to a non 0 value leads to clicking /
    popping sounds when ever we enter/leave powersaving mode. Ideally we would
    figure out how to avoid these sounds, but that is not always feasible.
    
    This commit adds a blacklist for devices where powersaving is known to
    cause problems and disables it on these devices.
    
    Note I tried to put this blacklist in userspace first:
    https://github.com/systemd/systemd/pull/8128
    
    But the systemd maintainers rightfully pointed out that it would be
    impossible to then later remove entries once we actually find a way to
    make power-saving work on listed boards without issues. Having this list
    in the kernel will allow removal of the blacklist entry in the same commit
    which fixes the clicks / plops.
    
    The blacklist only applies to the default power_save module-option value,
    if a user explicitly sets the module-option then the blacklist is not
    used.
    
    [ added an ifdef CONFIG_PM for the build error -- tiwai]
    
    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1525104
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=198611
    Cc: stable@vger.kernel.org
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e5e9a08e151f3e945c243a8e773de2f5059c16fc
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Feb 28 08:36:06 2018 +0100

    ALSA: x86: Fix missing spinlock and mutex initializations
    
    commit 350144069abf351c743d766b2fba9cb9b7cd32a1 upstream.
    
    The commit change for supporting the multiple ports moved involved
    some code shuffling, and there the initializations of spinlock and
    mutex in snd_intelhad object were dropped mistakenly.
    
    This patch adds the missing initializations again for each port.
    
    Fixes: b4eb0d522fcb ("ALSA: x86: Split snd_intelhad into card and PCM specific structures")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a2102a155f3d70bccffef9a658ceb1aea583c2c4
Author: Richard Fitzgerald <rf@opensource.cirrus.com>
Date:   Tue Feb 27 17:01:18 2018 +0000

    ALSA: control: Fix memory corruption risk in snd_ctl_elem_read
    
    commit 5a23699a39abc5328921a81b89383d088f6ba9cc upstream.
    
    The patch "ALSA: control: code refactoring for ELEM_READ/ELEM_WRITE
    operations" introduced a potential for kernel memory corruption due
    to an incorrect if statement allowing non-readable controls to fall
    through and call the get function. For TLV controls a driver can omit
    SNDRV_CTL_ELEM_ACCESS_READ to ensure that only the TLV get function
    can be called. Instead the normal get() can be invoked unexpectedly
    and as the driver expects that this will only be called for controls
    <= 512 bytes, potentially try to copy >512 bytes into the 512 byte
    return array, so corrupting kernel memory.
    
    The problem is an attempt to refactor the snd_ctl_elem_read function
    to invert the logic so that it conditionally aborted if the control
    is unreadable instead of conditionally executing. But the if statement
    wasn't inverted correctly.
    
    The correct inversion of
    
        if (a && !b)
    
    is
        if (!a || b)
    
    Fixes: becf9e5d553c2 ("ALSA: control: code refactoring for ELEM_READ/ELEM_WRITE operations")
    Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ebc24a828a2f94f960be88dbaf4359b5e1a6e4f3
Author: Erik Veijola <erik.veijola@gmail.com>
Date:   Fri Feb 23 14:06:52 2018 +0200

    ALSA: usb-audio: Add a quirck for B&W PX headphones
    
    commit 240a8af929c7c57dcde28682725b29cf8474e8e5 upstream.
    
    The capture interface doesn't work and the playback interface only
    supports 48 kHz sampling rate even though it advertises more rates.
    
    Signed-off-by: Erik Veijola <erik.veijola@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 e5966192439e9fbe241f3765e7aaa4e09765ebb1
Author: Alexander Steffen <Alexander.Steffen@infineon.com>
Date:   Mon Sep 11 12:26:52 2017 +0200

    tpm_tis_spi: Use DMA-safe memory for SPI transfers
    
    commit 6b3a13173f23e798e1ba213dd4a2c065a3b8d751 upstream.
    
    The buffers used as tx_buf/rx_buf in a SPI transfer need to be DMA-safe.
    This cannot be guaranteed for the buffers passed to tpm_tis_spi_read_bytes
    and tpm_tis_spi_write_bytes. Therefore, we need to use our own DMA-safe
    buffer and copy the data to/from it.
    
    The buffer needs to be allocated separately, to ensure that it is
    cacheline-aligned and not shared with other data, so that DMA can work
    correctly.
    
    Fixes: 0edbfea537d1 ("tpm/tpm_tis_spi: Add support for spi phy")
    Cc: stable@vger.kernel.org
    Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: Alexander Steffen <Alexander.Steffen@infineon.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fbb6fba47c059ce56b8881e1adf322bced4390c4
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Thu Sep 7 15:30:45 2017 +0200

    tpm: constify transmit data pointers
    
    commit c37fbc09bd4977736f6bc4050c6f099c587052a7 upstream.
    
    Making cmd_getticks 'const' introduced a couple of harmless warnings:
    
    drivers/char/tpm/tpm_tis_core.c: In function 'probe_itpm':
    drivers/char/tpm/tpm_tis_core.c:469:31: error: passing argument 2 of 'tpm_tis_send_data' discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
      rc = tpm_tis_send_data(chip, cmd_getticks, len);
    drivers/char/tpm/tpm_tis_core.c:477:31: error: passing argument 2 of 'tpm_tis_send_data' discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
      rc = tpm_tis_send_data(chip, cmd_getticks, len);
    drivers/char/tpm/tpm_tis_core.c:255:12: note: expected 'u8 * {aka unsigned char *}' but argument is of type 'const u8 * {aka const unsigned char *}'
     static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
    
    This changes the related functions to all take 'const' pointers
    so that gcc can see this as being correct. I had to slightly
    modify the logic around tpm_tis_spi_transfer() for this to work
    without introducing ugly casts.
    
    Cc: stable@vger.kernel.org
    Fixes: 5e35bd8e06b9 ("tpm_tis: make array cmd_getticks static const to shink object code size")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f8e331c508c22cf912e6b14f54ae68cf66f1c638
Author: Jeremy Boone <jeremy.boone@nccgroup.trust>
Date:   Thu Feb 8 12:32:06 2018 -0800

    tpm_tis: fix potential buffer overruns caused by bit glitches on the bus
    
    commit 6bb320ca4a4a7b5b3db8c8d7250cc40002046878 upstream.
    
    Discrete TPMs are often connected over slow serial buses which, on
    some platforms, can have glitches causing bit flips.  In all the
    driver _recv() functions, we need to use a u32 to unmarshal the
    response size, otherwise a bit flip of the 31st bit would cause the
    expected variable to go negative, which would then try to read a huge
    amount of data.  Also sanity check that the expected amount of data is
    large enough for the TPM header.
    
    Signed-off-by: Jeremy Boone <jeremy.boone@nccgroup.trust>
    Cc: stable@vger.kernel.org
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: James Morris <james.morris@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 37dfbccd4b2275169d4e1af3c1726256d835675b
Author: Jeremy Boone <jeremy.boone@nccgroup.trust>
Date:   Thu Feb 8 12:31:16 2018 -0800

    tpm_i2c_nuvoton: fix potential buffer overruns caused by bit glitches on the bus
    
    commit f9d4d9b5a5ef2f017bc344fb65a58a902517173b upstream.
    
    Discrete TPMs are often connected over slow serial buses which, on
    some platforms, can have glitches causing bit flips.  In all the
    driver _recv() functions, we need to use a u32 to unmarshal the
    response size, otherwise a bit flip of the 31st bit would cause the
    expected variable to go negative, which would then try to read a huge
    amount of data.  Also sanity check that the expected amount of data is
    large enough for the TPM header.
    
    Signed-off-by: Jeremy Boone <jeremy.boone@nccgroup.trust>
    Cc: stable@vger.kernel.org
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: James Morris <james.morris@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e9951ab03f51a349160167794deb82d1f6e258af
Author: Jeremy Boone <jeremy.boone@nccgroup.trust>
Date:   Thu Feb 8 12:30:01 2018 -0800

    tpm_i2c_infineon: fix potential buffer overruns caused by bit glitches on the bus
    
    commit 9b8cb28d7c62568a5916bdd7ea1c9176d7f8f2ed upstream.
    
    Discrete TPMs are often connected over slow serial buses which, on
    some platforms, can have glitches causing bit flips.  In all the
    driver _recv() functions, we need to use a u32 to unmarshal the
    response size, otherwise a bit flip of the 31st bit would cause the
    expected variable to go negative, which would then try to read a huge
    amount of data.  Also sanity check that the expected amount of data is
    large enough for the TPM header.
    
    Signed-off-by: Jeremy Boone <jeremy.boone@nccgroup.trust>
    Cc: stable@vger.kernel.org
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: James Morris <james.morris@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 648b62fda1a35c9198689cca76ace580a67e7872
Author: Jeremy Boone <jeremy.boone@nccgroup.trust>
Date:   Thu Feb 8 12:28:08 2018 -0800

    tpm: fix potential buffer overruns caused by bit glitches on the bus
    
    commit 3be23274755ee85771270a23af7691dc9b3a95db upstream.
    
    Discrete TPMs are often connected over slow serial buses which, on
    some platforms, can have glitches causing bit flips.  If a bit does
    flip it could cause an overrun if it's in one of the size parameters,
    so sanity check that we're not overrunning the provided buffer when
    doing a memcpy().
    
    Signed-off-by: Jeremy Boone <jeremy.boone@nccgroup.trust>
    Cc: stable@vger.kernel.org
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: James Morris <james.morris@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 703fca31ac31ed81455a8642a6988cbca47f0f07
Author: Jeremy Boone <jeremy.boone@nccgroup.trust>
Date:   Thu Feb 8 12:29:09 2018 -0800

    tpm: st33zp24: fix potential buffer overruns caused by bit glitches on the bus
    
    commit 6d24cd186d9fead3722108dec1b1c993354645ff upstream.
    
    Discrete TPMs are often connected over slow serial buses which, on
    some platforms, can have glitches causing bit flips.  In all the
    driver _recv() functions, we need to use a u32 to unmarshal the
    response size, otherwise a bit flip of the 31st bit would cause the
    expected variable to go negative, which would then try to read a huge
    amount of data.  Also sanity check that the expected amount of data is
    large enough for the TPM header.
    
    Signed-off-by: Jeremy Boone <jeremy.boone@nccgroup.trust>
    Cc: stable@vger.kernel.org
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: James Morris <james.morris@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 972b19e615a2a31720a293b3436148294469e88f
Author: Emil Tantilov <emil.s.tantilov@intel.com>
Date:   Fri Feb 23 12:39:41 2018 -0800

    ixgbe: fix crash in build_skb Rx code path
    
    commit 0c5661ecc5dd7ce296870a3eb7b62b1b280a5e89 upstream.
    
    Add check for build_skb enabled ring in ixgbe_dma_sync_frag().
    In that case &skb_shinfo(skb)->frags[0] may not always be set which
    can lead to a crash. Instead we derive the page offset from skb->data.
    
    Fixes: 42073d91a214 ("ixgbe: Have the CPU take ownership of the buffers sooner")
    CC: stable <stable@vger.kernel.org>
    Reported-by: Ambarish Soman <asoman@redhat.com>
    Suggested-by: Alexander Duyck <alexander.h.duyck@intel.com>
    Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
    Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 971039cc4da1b1a800ec1f43edaa2c0aecf338a7
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Tue Feb 20 09:06:18 2018 +0100

    Bluetooth: btusb: Use DMI matching for QCA reset_resume quirking
    
    commit 1fdb926974695d3dbc05a429bafa266fdd16510e upstream.
    
    Commit 61f5acea8737 ("Bluetooth: btusb: Restore QCA Rome suspend/resume fix
    with a "rewritten" version") applied the USB_QUIRK_RESET_RESUME to all QCA
    USB Bluetooth modules. But it turns out that the resume problems are not
    caused by the QCA Rome chipset, on most platforms it resumes fine. The
    resume problems are actually a platform problem (likely the platform
    cutting all power when suspended).
    
    The USB_QUIRK_RESET_RESUME quirk also disables runtime suspend, so by
    matching on usb-ids, we're causing all boards with these chips to use extra
    power, to fix resume problems which only happen on some boards.
    
    This commit fixes this by applying the quirk based on DMI matching instead
    of on usb-ids, so that we match the platform and not the chipset.
    
    Here is the /sys/kernel/debug/usb/devices for the Bluetooth module:
    
    T:  Bus=01 Lev=01 Prnt=01 Port=07 Cnt=04 Dev#=  5 Spd=12   MxCh= 0
    D:  Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=0cf3 ProdID=e300 Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    
    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Fixes: 61f5acea8737 ("Bluetooth: btusb: Restore QCA Rome suspend/resume..")
    Cc: stable@vger.kernel.org
    Cc: Brian Norris <briannorris@chromium.org>
    Cc: Kai-Heng Feng <kai.heng.feng@canonical.com>
    Reported-and-tested-by: Kevin Fenzi <kevin@scrye.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>