commit 9667e83dd0a156f1ad66245ab75a125222a58d7c
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Apr 19 08:54:12 2018 +0200

    Linux 4.16.3

commit 661364d5f36fb387dc46e4b768e16a94e8513d32
Author: Sudhir Sreedharan <ssreedharan@mvista.com>
Date:   Thu Feb 15 12:52:45 2018 +0530

    rtl8187: Fix NULL pointer dereference in priv->conf_mutex
    
    commit 7972326a26b5bf8dc2adac575c4e03ee7e9d193a upstream.
    
    This can be reproduced by bind/unbind the driver multiple times
    in AM3517 board.
    
    Analysis revealed that rtl8187_start() was invoked before probe
    finishes(ie. before the mutex is initialized).
    
     INFO: trying to register non-static key.
     the code is fine but needs lockdep annotation.
     turning off the locking correctness validator.
     CPU: 0 PID: 821 Comm: wpa_supplicant Not tainted 4.9.80-dirty #250
     Hardware name: Generic AM3517 (Flattened Device Tree)
     [<c010e0d8>] (unwind_backtrace) from [<c010beac>] (show_stack+0x10/0x14)
     [<c010beac>] (show_stack) from [<c017401c>] (register_lock_class+0x4f4/0x55c)
     [<c017401c>] (register_lock_class) from [<c0176fe0>] (__lock_acquire+0x74/0x1938)
     [<c0176fe0>] (__lock_acquire) from [<c0178cfc>] (lock_acquire+0xfc/0x23c)
     [<c0178cfc>] (lock_acquire) from [<c08aa2f8>] (mutex_lock_nested+0x50/0x3b0)
     [<c08aa2f8>] (mutex_lock_nested) from [<c05f5bf8>] (rtl8187_start+0x2c/0xd54)
     [<c05f5bf8>] (rtl8187_start) from [<c082dea0>] (drv_start+0xa8/0x320)
     [<c082dea0>] (drv_start) from [<c084d1d4>] (ieee80211_do_open+0x2bc/0x8e4)
     [<c084d1d4>] (ieee80211_do_open) from [<c069be94>] (__dev_open+0xb8/0x120)
     [<c069be94>] (__dev_open) from [<c069c11c>] (__dev_change_flags+0x88/0x14c)
     [<c069c11c>] (__dev_change_flags) from [<c069c1f8>] (dev_change_flags+0x18/0x48)
     [<c069c1f8>] (dev_change_flags) from [<c0710b08>] (devinet_ioctl+0x738/0x840)
     [<c0710b08>] (devinet_ioctl) from [<c067925c>] (sock_ioctl+0x164/0x2f4)
     [<c067925c>] (sock_ioctl) from [<c02883f8>] (do_vfs_ioctl+0x8c/0x9d0)
     [<c02883f8>] (do_vfs_ioctl) from [<c0288da8>] (SyS_ioctl+0x6c/0x7c)
     [<c0288da8>] (SyS_ioctl) from [<c0107760>] (ret_fast_syscall+0x0/0x1c)
     Unable to handle kernel NULL pointer dereference at virtual address 00000000
     pgd = cd1ec000
     [00000000] *pgd=8d1de831, *pte=00000000, *ppte=00000000
     Internal error: Oops: 817 [#1] PREEMPT ARM
     Modules linked in:
     CPU: 0 PID: 821 Comm: wpa_supplicant Not tainted 4.9.80-dirty #250
     Hardware name: Generic AM3517 (Flattened Device Tree)
     task: ce73eec0 task.stack: cd1ea000
     PC is at mutex_lock_nested+0xe8/0x3b0
     LR is at mutex_lock_nested+0xd0/0x3b0
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Sudhir Sreedharan <ssreedharan@mvista.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6043c12510b25b0248cc81cd1f284843a305b519
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Fri Mar 16 21:28:08 2018 +0100

    Bluetooth: hci_bcm: Treat Interrupt ACPI resources as always being active-low
    
    commit bb5208b314c5127b716b2ee4f55803a8bb73b750 upstream.
    
    Older devices with a serdev attached bcm bt hci, use an Interrupt ACPI
    resource to describe the IRQ (rather then a GpioInt resource).
    
    These device seem to all claim the IRQ is active-high and seem to all need
    a DMI quirk to treat it as active-low. Instead simply always assume that
    Interrupt resource specified IRQs are always active-low.
    
    This fixes the bt device not being able to wake the host from runtime-
    suspend on the: Asus T100TAM, Asus T200TA, Lenovo Yoga2 and the Toshiba
    Encore, without the need to add 4 new DMI quirks for these models.
    
    This also allows us to remove 2 DMI quirks for the Asus T100TA and Asus
    T100CHI series. Likely the 2 remaining quirks can also be removed but I
    could not find a DSDT of these devices to verify this.
    
    Cc: stable@vger.kernel.org
    Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=198953
    Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1554835
    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>

commit cd774d5f50be71ace81d434112163d40960c30ff
Author: Szymon Janc <szymon.janc@codecoup.pl>
Date:   Tue Apr 3 13:40:06 2018 +0200

    Bluetooth: Fix connection if directed advertising and privacy is used
    
    commit 082f2300cfa1a3d9d5221c38c5eba85d4ab98bd8 upstream.
    
    Local random address needs to be updated before creating connection if
    RPA from LE Direct Advertising Report was resolved in host. Otherwise
    remote device might ignore connection request due to address mismatch.
    
    This was affecting following qualification test cases:
    GAP/CONN/SCEP/BV-03-C, GAP/CONN/GCEP/BV-05-C, GAP/CONN/DCEP/BV-05-C
    
    Before patch:
    < HCI Command: LE Set Random Address (0x08|0x0005) plen 6          #11350 [hci0] 84680.231216
            Address: 56:BC:E8:24:11:68 (Resolvable)
              Identity type: Random (0x01)
              Identity: F2:F1:06:3D:9C:42 (Static)
    > HCI Event: Command Complete (0x0e) plen 4                        #11351 [hci0] 84680.246022
          LE Set Random Address (0x08|0x0005) ncmd 1
            Status: Success (0x00)
    < HCI Command: LE Set Scan Parameters (0x08|0x000b) plen 7         #11352 [hci0] 84680.246417
            Type: Passive (0x00)
            Interval: 60.000 msec (0x0060)
            Window: 30.000 msec (0x0030)
            Own address type: Random (0x01)
            Filter policy: Accept all advertisement, inc. directed unresolved RPA (0x02)
    > HCI Event: Command Complete (0x0e) plen 4                        #11353 [hci0] 84680.248854
          LE Set Scan Parameters (0x08|0x000b) ncmd 1
            Status: Success (0x00)
    < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2             #11354 [hci0] 84680.249466
            Scanning: Enabled (0x01)
            Filter duplicates: Enabled (0x01)
    > HCI Event: Command Complete (0x0e) plen 4                        #11355 [hci0] 84680.253222
          LE Set Scan Enable (0x08|0x000c) ncmd 1
            Status: Success (0x00)
    > HCI Event: LE Meta Event (0x3e) plen 18                          #11356 [hci0] 84680.458387
          LE Direct Advertising Report (0x0b)
            Num reports: 1
            Event type: Connectable directed - ADV_DIRECT_IND (0x01)
            Address type: Random (0x01)
            Address: 53:38:DA:46:8C:45 (Resolvable)
              Identity type: Public (0x00)
              Identity: 11:22:33:44:55:66 (OUI 11-22-33)
            Direct address type: Random (0x01)
            Direct address: 7C:D6:76:8C:DF:82 (Resolvable)
              Identity type: Random (0x01)
              Identity: F2:F1:06:3D:9C:42 (Static)
            RSSI: -74 dBm (0xb6)
    < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2             #11357 [hci0] 84680.458737
            Scanning: Disabled (0x00)
            Filter duplicates: Disabled (0x00)
    > HCI Event: Command Complete (0x0e) plen 4                        #11358 [hci0] 84680.469982
          LE Set Scan Enable (0x08|0x000c) ncmd 1
            Status: Success (0x00)
    < HCI Command: LE Create Connection (0x08|0x000d) plen 25          #11359 [hci0] 84680.470444
            Scan interval: 60.000 msec (0x0060)
            Scan window: 60.000 msec (0x0060)
            Filter policy: White list is not used (0x00)
            Peer address type: Random (0x01)
            Peer address: 53:38:DA:46:8C:45 (Resolvable)
              Identity type: Public (0x00)
              Identity: 11:22:33:44:55:66 (OUI 11-22-33)
            Own address type: Random (0x01)
            Min connection interval: 30.00 msec (0x0018)
            Max connection interval: 50.00 msec (0x0028)
            Connection latency: 0 (0x0000)
            Supervision timeout: 420 msec (0x002a)
            Min connection length: 0.000 msec (0x0000)
            Max connection length: 0.000 msec (0x0000)
    > HCI Event: Command Status (0x0f) plen 4                          #11360 [hci0] 84680.474971
          LE Create Connection (0x08|0x000d) ncmd 1
            Status: Success (0x00)
    < HCI Command: LE Create Connection Cancel (0x08|0x000e) plen 0    #11361 [hci0] 84682.545385
    > HCI Event: Command Complete (0x0e) plen 4                        #11362 [hci0] 84682.551014
          LE Create Connection Cancel (0x08|0x000e) ncmd 1
            Status: Success (0x00)
    > HCI Event: LE Meta Event (0x3e) plen 19                          #11363 [hci0] 84682.551074
          LE Connection Complete (0x01)
            Status: Unknown Connection Identifier (0x02)
            Handle: 0
            Role: Master (0x00)
            Peer address type: Public (0x00)
            Peer address: 00:00:00:00:00:00 (OUI 00-00-00)
            Connection interval: 0.00 msec (0x0000)
            Connection latency: 0 (0x0000)
            Supervision timeout: 0 msec (0x0000)
            Master clock accuracy: 0x00
    
    After patch:
    < HCI Command: LE Set Scan Parameters (0x08|0x000b) plen 7    #210 [hci0] 667.152459
            Type: Passive (0x00)
            Interval: 60.000 msec (0x0060)
            Window: 30.000 msec (0x0030)
            Own address type: Random (0x01)
            Filter policy: Accept all advertisement, inc. directed unresolved RPA (0x02)
    > HCI Event: Command Complete (0x0e) plen 4                   #211 [hci0] 667.153613
          LE Set Scan Parameters (0x08|0x000b) ncmd 1
            Status: Success (0x00)
    < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2        #212 [hci0] 667.153704
            Scanning: Enabled (0x01)
            Filter duplicates: Enabled (0x01)
    > HCI Event: Command Complete (0x0e) plen 4                   #213 [hci0] 667.154584
          LE Set Scan Enable (0x08|0x000c) ncmd 1
            Status: Success (0x00)
    > HCI Event: LE Meta Event (0x3e) plen 18                     #214 [hci0] 667.182619
          LE Direct Advertising Report (0x0b)
            Num reports: 1
            Event type: Connectable directed - ADV_DIRECT_IND (0x01)
            Address type: Random (0x01)
            Address: 50:52:D9:A6:48:A0 (Resolvable)
              Identity type: Public (0x00)
              Identity: 11:22:33:44:55:66 (OUI 11-22-33)
            Direct address type: Random (0x01)
            Direct address: 7C:C1:57:A5:B7:A8 (Resolvable)
              Identity type: Random (0x01)
              Identity: F4:28:73:5D:38:B0 (Static)
            RSSI: -70 dBm (0xba)
    < HCI Command: LE Set Scan Enable (0x08|0x000c) plen 2       #215 [hci0] 667.182704
            Scanning: Disabled (0x00)
            Filter duplicates: Disabled (0x00)
    > HCI Event: Command Complete (0x0e) plen 4                  #216 [hci0] 667.183599
          LE Set Scan Enable (0x08|0x000c) ncmd 1
            Status: Success (0x00)
    < HCI Command: LE Set Random Address (0x08|0x0005) plen 6    #217 [hci0] 667.183645
            Address: 7C:C1:57:A5:B7:A8 (Resolvable)
              Identity type: Random (0x01)
              Identity: F4:28:73:5D:38:B0 (Static)
    > HCI Event: Command Complete (0x0e) plen 4                  #218 [hci0] 667.184590
          LE Set Random Address (0x08|0x0005) ncmd 1
            Status: Success (0x00)
    < HCI Command: LE Create Connection (0x08|0x000d) plen 25    #219 [hci0] 667.184613
            Scan interval: 60.000 msec (0x0060)
            Scan window: 60.000 msec (0x0060)
            Filter policy: White list is not used (0x00)
            Peer address type: Random (0x01)
            Peer address: 50:52:D9:A6:48:A0 (Resolvable)
              Identity type: Public (0x00)
              Identity: 11:22:33:44:55:66 (OUI 11-22-33)
            Own address type: Random (0x01)
            Min connection interval: 30.00 msec (0x0018)
            Max connection interval: 50.00 msec (0x0028)
            Connection latency: 0 (0x0000)
            Supervision timeout: 420 msec (0x002a)
            Min connection length: 0.000 msec (0x0000)
            Max connection length: 0.000 msec (0x0000)
    > HCI Event: Command Status (0x0f) plen 4                    #220 [hci0] 667.186558
          LE Create Connection (0x08|0x000d) ncmd 1
            Status: Success (0x00)
    > HCI Event: LE Meta Event (0x3e) plen 19                    #221 [hci0] 667.485824
          LE Connection Complete (0x01)
            Status: Success (0x00)
            Handle: 0
            Role: Master (0x00)
            Peer address type: Random (0x01)
            Peer address: 50:52:D9:A6:48:A0 (Resolvable)
              Identity type: Public (0x00)
              Identity: 11:22:33:44:55:66 (OUI 11-22-33)
            Connection interval: 50.00 msec (0x0028)
            Connection latency: 0 (0x0000)
            Supervision timeout: 420 msec (0x002a)
            Master clock accuracy: 0x07
    @ MGMT Event: Device Connected (0x000b) plen 13          {0x0002} [hci0] 667.485996
            LE Address: 11:22:33:44:55:66 (OUI 11-22-33)
            Flags: 0x00000000
            Data length: 0
    
    Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 848759157ab9be09f562842b51ed0d4c5b0f2e41
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Apr 8 11:57:10 2018 -0400

    getname_kernel() needs to make sure that ->name != ->iname in long case
    
    commit 30ce4d1903e1d8a7ccd110860a5eef3c638ed8be upstream.
    
    missed it in "kill struct filename.separate" several years ago.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c81e1b6b2cfb4d8b272c819e88aab1b4ee443543
Author: Michael S. Tsirkin <mst@redhat.com>
Date:   Fri Apr 13 15:35:16 2018 -0700

    mm/gup_benchmark: handle gup failures
    
    commit 09e35a4a1ca8b9988ca9b8557d17948cd6c0808b upstream.
    
    Patch series "mm/get_user_pages_fast fixes, cleanups", v2.
    
    Turns out get_user_pages_fast and __get_user_pages_fast return different
    values on error when given a single page: __get_user_pages_fast returns
    0.  get_user_pages_fast returns either 0 or an error.
    
    Callers of get_user_pages_fast expect an error so fix it up to return an
    error consistently.
    
    Stress the difference between get_user_pages_fast and
    __get_user_pages_fast to make sure callers aren't confused.
    
    This patch (of 3):
    
    __gup_benchmark_ioctl does not handle the case where get_user_pages_fast
    fails:
    
     - a negative return code will cause a buffer overrun
    
     - returning with partial success will cause use of uninitialized
       memory.
    
    [akpm@linux-foundation.org: simplification]
    Link: http://lkml.kernel.org/r/1522962072-182137-3-git-send-email-mst@redhat.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Huang Ying <ying.huang@intel.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Thorsten Leemhuis <regressions@leemhuis.info>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit aa70aeaf0479235d25b4e39d7bc64a5fe748d5ad
Author: Michael S. Tsirkin <mst@redhat.com>
Date:   Fri Apr 13 15:35:20 2018 -0700

    get_user_pages_fast(): return -EFAULT on access_ok failure
    
    commit c61611f70958d86f659bca25c02ae69413747a8d upstream.
    
    get_user_pages_fast is supposed to be a faster drop-in equivalent of
    get_user_pages.  As such, callers expect it to return a negative return
    code when passed an invalid address, and never expect it to return 0
    when passed a positive number of pages, since its documentation says:
    
     * Returns number of pages pinned. This may be fewer than the number
     * requested. If nr_pages is 0 or negative, returns 0. If no pages
     * were pinned, returns -errno.
    
    When get_user_pages_fast fall back on get_user_pages this is exactly
    what happens.  Unfortunately the implementation is inconsistent: it
    returns 0 if passed a kernel address, confusing callers: for example,
    the following is pretty common but does not appear to do the right thing
    with a kernel address:
    
            ret = get_user_pages_fast(addr, 1, writeable, &page);
            if (ret < 0)
                    return ret;
    
    Change get_user_pages_fast to return -EFAULT when supplied a kernel
    address to make it match expectations.
    
    All callers have been audited for consistency with the documented
    semantics.
    
    Link: http://lkml.kernel.org/r/1522962072-182137-4-git-send-email-mst@redhat.com
    Fixes: 5b65c4677a57 ("mm, x86/mm: Fix performance regression in get_user_pages_fast()")
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Reported-by: syzbot+6304bf97ef436580fede@syzkaller.appspotmail.com
    Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Huang Ying <ying.huang@intel.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Thorsten Leemhuis <regressions@leemhuis.info>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1c843b6f24fa9f1e0c0a557f7615a7ba06ae504f
Author: Heiko Carstens <heiko.carstens@de.ibm.com>
Date:   Fri Apr 6 18:10:04 2018 +0200

    s390/compat: fix setup_frame32
    
    commit 8b09ca746a643ca452cd41a522046a96ee5a55fd upstream.
    
    Git commit c60a03fee0e5 ("s390: switch to {get,put}_compat_sigset()")
    contains a typo and now copies the wrong pointer to user space.
    Use the correct pointer instead.
    
    Reported-and-tested-by: Stefan Liebler <stli@linux.vnet.ibm.com>
    Fixes: c60a03fee0e5 ("s390: switch to {get,put}_compat_sigset()")
    Cc: <stable@vger.kernel.org> # v4.15+
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2e2e7c1a5cfde468475f243c2729584dfdd701fa
Author: Vasily Gorbik <gor@linux.ibm.com>
Date:   Tue Apr 3 16:02:15 2018 +0200

    s390/ipl: ensure loadparm valid flag is set
    
    commit 15deb080a6087b73089139569558965750e69d67 upstream.
    
    When loadparm is set in reipl parm block, the kernel should also set
    DIAG308_FLAGS_LP_VALID flag.
    
    This fixes loadparm ignoring during z/VM fcp -> ccw reipl and kvm direct
    boot -> ccw reipl.
    
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b67025e4cf28a1aeb2f6fe78c1e592d93a7a22c6
Author: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Date:   Wed Mar 7 14:01:01 2018 +0100

    s390/qdio: don't merge ERROR output buffers
    
    commit 0cf1e05157b9e5530dcc3ca9fec9bf617fc93375 upstream.
    
    On an Output queue, both EMPTY and PENDING buffer states imply that the
    buffer is ready for completion-processing by the upper-layer drivers.
    
    So for a non-QEBSM Output queue, get_buf_states() merges mixed
    batches of PENDING and EMPTY buffers into one large batch of EMPTY
    buffers. The upper-layer driver (ie. qeth) later distuingishes PENDING
    from EMPTY by inspecting the slsb_state for
    QDIO_OUTBUF_STATE_FLAG_PENDING.
    
    But the merge logic in get_buf_states() contains a bug that causes us to
    erronously also merge ERROR buffers into such a batch of EMPTY buffers
    (ERROR is 0xaf, EMPTY is 0xa1; so ERROR & EMPTY == EMPTY).
    Effectively, most outbound ERROR buffers are currently discarded
    silently and processed as if they had succeeded.
    
    Note that this affects _all_ non-QEBSM device types, not just IQD with CQ.
    
    Fix it by explicitly spelling out the exact conditions for merging.
    
    For extracting the "get initial state" part out of the loop, this relies
    on the fact that get_buf_states() is never called with a count of 0. The
    QEBSM path already strictly requires this, and the two callers with
    variable 'count' make sure of it.
    
    Fixes: 104ea556ee7f ("qdio: support asynchronous delivery of storage blocks")
    Cc: <stable@vger.kernel.org> #v3.2+
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Reviewed-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ac347b9e88be180f852f380a2d4579aea5c16384
Author: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Date:   Mon Mar 5 09:39:38 2018 +0100

    s390/qdio: don't retry EQBS after CCQ 96
    
    commit dae55b6fef58530c13df074bcc182c096609339e upstream.
    
    Immediate retry of EQBS after CCQ 96 means that we potentially misreport
    the state of buffers inspected during the first EQBS call.
    
    This occurs when
    1. the first EQBS finds all inspected buffers still in the initial state
       set by the driver (ie INPUT EMPTY or OUTPUT PRIMED),
    2. the EQBS terminates early with CCQ 96, and
    3. by the time that the second EQBS comes around, the state of those
       previously inspected buffers has changed.
    
    If the state reported by the second EQBS is 'driver-owned', all we know
    is that the previous buffers are driver-owned now as well. But we can't
    tell if they all have the same state. So for instance
    - the second EQBS reports OUTPUT EMPTY, but any number of the previous
      buffers could be OUTPUT ERROR by now,
    - the second EQBS reports OUTPUT ERROR, but any number of the previous
      buffers could be OUTPUT EMPTY by now.
    
    Effectively, this can result in both over- and underreporting of errors.
    
    If the state reported by the second EQBS is 'HW-owned', that doesn't
    guarantee that the previous buffers have not been switched to
    driver-owned in the mean time. So for instance
    - the second EQBS reports INPUT EMPTY, but any number of the previous
      buffers could be INPUT PRIMED (or INPUT ERROR) by now.
    
    This would result in failure to process pending work on the queue. If
    it's the final check before yielding initiative, this can cause
    a (temporary) queue stall due to IRQ avoidance.
    
    Fixes: 25f269f17316 ("[S390] qdio: EQBS retry after CCQ 96")
    Cc: <stable@vger.kernel.org> #v3.2+
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8f8b1583a39900b74423135cac5d43d39dd71d1c
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Mon Apr 2 16:49:30 2018 -0700

    nfit: fix region registration vs block-data-window ranges
    
    commit 8d0d8ed3356aa9ed43b819aaedd39b08ca453007 upstream.
    
    Commit 1cf03c00e7c1 "nfit: scrub and register regions in a workqueue"
    mistakenly attempts to register a region per BLK aperture. There is
    nothing to register for individual apertures as they belong as a set to
    a BLK aperture group that are registered with a corresponding
    DIMM-control-region. Filter them for registration to prevent some
    needless devm_kzalloc() allocations.
    
    Cc: <stable@vger.kernel.org>
    Fixes: 1cf03c00e7c1 ("nfit: scrub and register regions in a workqueue")
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ee41198757293c783ed87c2957231198cec4367f
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Fri Apr 6 10:03:17 2018 +0900

    block/loop: fix deadlock after loop_set_status
    
    commit 1e047eaab3bb5564f25b41e9cd3a053009f4e789 upstream.
    
    syzbot is reporting deadlocks at __blkdev_get() [1].
    
    ----------------------------------------
    [   92.493919] systemd-udevd   D12696   525      1 0x00000000
    [   92.495891] Call Trace:
    [   92.501560]  schedule+0x23/0x80
    [   92.502923]  schedule_preempt_disabled+0x5/0x10
    [   92.504645]  __mutex_lock+0x416/0x9e0
    [   92.510760]  __blkdev_get+0x73/0x4f0
    [   92.512220]  blkdev_get+0x12e/0x390
    [   92.518151]  do_dentry_open+0x1c3/0x2f0
    [   92.519815]  path_openat+0x5d9/0xdc0
    [   92.521437]  do_filp_open+0x7d/0xf0
    [   92.527365]  do_sys_open+0x1b8/0x250
    [   92.528831]  do_syscall_64+0x6e/0x270
    [   92.530341]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
    
    [   92.931922] 1 lock held by systemd-udevd/525:
    [   92.933642]  #0: 00000000a2849e25 (&bdev->bd_mutex){+.+.}, at: __blkdev_get+0x73/0x4f0
    ----------------------------------------
    
    The reason of deadlock turned out that wait_event_interruptible() in
    blk_queue_enter() got stuck with bdev->bd_mutex held at __blkdev_put()
    due to q->mq_freeze_depth == 1.
    
    ----------------------------------------
    [   92.787172] a.out           S12584   634    633 0x80000002
    [   92.789120] Call Trace:
    [   92.796693]  schedule+0x23/0x80
    [   92.797994]  blk_queue_enter+0x3cb/0x540
    [   92.803272]  generic_make_request+0xf0/0x3d0
    [   92.807970]  submit_bio+0x67/0x130
    [   92.810928]  submit_bh_wbc+0x15e/0x190
    [   92.812461]  __block_write_full_page+0x218/0x460
    [   92.815792]  __writepage+0x11/0x50
    [   92.817209]  write_cache_pages+0x1ae/0x3d0
    [   92.825585]  generic_writepages+0x5a/0x90
    [   92.831865]  do_writepages+0x43/0xd0
    [   92.836972]  __filemap_fdatawrite_range+0xc1/0x100
    [   92.838788]  filemap_write_and_wait+0x24/0x70
    [   92.840491]  __blkdev_put+0x69/0x1e0
    [   92.841949]  blkdev_close+0x16/0x20
    [   92.843418]  __fput+0xda/0x1f0
    [   92.844740]  task_work_run+0x87/0xb0
    [   92.846215]  do_exit+0x2f5/0xba0
    [   92.850528]  do_group_exit+0x34/0xb0
    [   92.852018]  SyS_exit_group+0xb/0x10
    [   92.853449]  do_syscall_64+0x6e/0x270
    [   92.854944]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
    
    [   92.943530] 1 lock held by a.out/634:
    [   92.945105]  #0: 00000000a2849e25 (&bdev->bd_mutex){+.+.}, at: __blkdev_put+0x3c/0x1e0
    ----------------------------------------
    
    The reason of q->mq_freeze_depth == 1 turned out that loop_set_status()
    forgot to call blk_mq_unfreeze_queue() at error paths for
    info->lo_encrypt_type != NULL case.
    
    ----------------------------------------
    [   37.509497] CPU: 2 PID: 634 Comm: a.out Tainted: G        W        4.16.0+ #457
    [   37.513608] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 05/19/2017
    [   37.518832] RIP: 0010:blk_freeze_queue_start+0x17/0x40
    [   37.521778] RSP: 0018:ffffb0c2013e7c60 EFLAGS: 00010246
    [   37.524078] RAX: 0000000000000000 RBX: ffff8b07b1519798 RCX: 0000000000000000
    [   37.527015] RDX: 0000000000000002 RSI: ffffb0c2013e7cc0 RDI: ffff8b07b1519798
    [   37.529934] RBP: ffffb0c2013e7cc0 R08: 0000000000000008 R09: 47a189966239b898
    [   37.532684] R10: dad78b99b278552f R11: 9332dca72259d5ef R12: ffff8b07acd73678
    [   37.535452] R13: 0000000000004c04 R14: 0000000000000000 R15: ffff8b07b841e940
    [   37.538186] FS:  00007fede33b9740(0000) GS:ffff8b07b8e80000(0000) knlGS:0000000000000000
    [   37.541168] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   37.543590] CR2: 00000000206fdf18 CR3: 0000000130b30006 CR4: 00000000000606e0
    [   37.546410] Call Trace:
    [   37.547902]  blk_freeze_queue+0x9/0x30
    [   37.549968]  loop_set_status+0x67/0x3c0 [loop]
    [   37.549975]  loop_set_status64+0x3b/0x70 [loop]
    [   37.549986]  lo_ioctl+0x223/0x810 [loop]
    [   37.549995]  blkdev_ioctl+0x572/0x980
    [   37.550003]  block_ioctl+0x34/0x40
    [   37.550006]  do_vfs_ioctl+0xa7/0x6d0
    [   37.550017]  ksys_ioctl+0x6b/0x80
    [   37.573076]  SyS_ioctl+0x5/0x10
    [   37.574831]  do_syscall_64+0x6e/0x270
    [   37.576769]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
    ----------------------------------------
    
    [1] https://syzkaller.appspot.com/bug?id=cd662bc3f6022c0979d01a262c318fab2ee9b56f
    
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Reported-by: syzbot <bot+48594378e9851eab70bcd6f99327c7db58c5a28a@syzkaller.appspotmail.com>
    Fixes: ecdd09597a572513 ("block/loop: fix race between I/O and set_status")
    Cc: Ming Lei <tom.leiming@gmail.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: stable <stable@vger.kernel.org>
    Cc: Jens Axboe <axboe@fb.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d9d9fce9124a91b4711bdcad4001d582d9c772ce
Author: John Johansen <john.johansen@canonical.com>
Date:   Fri Feb 9 04:57:39 2018 -0800

    apparmor: fix resource audit messages when auditing peer
    
    commit b5beb07ad32ab533027aa988d96a44965ec116f7 upstream.
    
    Resource auditing is using the peer field which is not available
    when the rlim data struct is used, because it is a different element
    of the same union. Accessing peer during resource auditing could
    cause garbage log entries or even oops the kernel.
    
    Move the rlim data block into the same struct as the peer field
    so they can be used together.
    
    CC: <stable@vger.kernel.org>
    Fixes: 86b92cb782b3 ("apparmor: move resource checks to using labels")
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d12b8ce551d7914fc2c20b3f5ecc164cb31c6852
Author: John Johansen <john.johansen@canonical.com>
Date:   Tue Jan 23 01:47:42 2018 -0800

    apparmor: fix display of .ns_name for containers
    
    commit 040d9e2bce0a5b321c402b79ee43a8e8d2fd3b06 upstream.
    
    The .ns_name should not be virtualized by the current ns view. It
    needs to report the ns base name as that is being used during startup
    as part of determining apparmor policy namespace support.
    
    BugLink: http://bugs.launchpad.net/bugs/1746463
    Fixes: d9f02d9c237aa ("apparmor: fix display of ns name")
    Cc: Stable <stable@vger.kernel.org>
    Reported-by: Serge Hallyn <serge@hallyn.com>
    Tested-by: Serge Hallyn <serge@hallyn.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 76d169b8bb7157152f863f659f8b8e75991d2d26
Author: John Johansen <john.johansen@canonical.com>
Date:   Thu Feb 1 11:24:10 2018 +0100

    apparmor: fix logging of the existence test for signals
    
    commit 98cf5bbff413eadf1b9cb195a7b80cc61c72a50e upstream.
    
    The existence test is not being properly logged as the signal mapping
    maps it to the last entry in the named signal table. This is done
    to help catch bugs by making the 0 mapped signal value invalid so
    that we can catch the signal value not being filled in.
    
    When fixing the off-by-one comparision logic the reporting of the
    existence test was broken, because the logic behind the mapped named
    table was hidden. Fix this by adding a define for the name lookup
    and using it.
    
    Cc: Stable <stable@vger.kernel.org>
    Fixes: f7dc4c9a855a1 ("apparmor: fix off-by-one comparison on MAXMAPPED_SIG")
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 80dc97f7e1e1b90ab62dc120ec9d09d69c8e03e8
Author: Bart Van Assche <bart.vanassche@wdc.com>
Date:   Thu Apr 5 10:32:59 2018 -0700

    Revert "scsi: core: return BLK_STS_OK for DID_OK in __scsi_error_from_host_byte()"
    
    commit cbe095e2b584623b882ebaf6c18e0b9077baa3f7 upstream.
    
    The description of commit e39a97353e53 is wrong: it mentions that commit
    2a842acab109 introduced a bug in __scsi_error_from_host_byte() although that
    commit did not change the behavior of that function.  Additionally, commit
    e39a97353e53 introduced a bug: it causes commands that fail with
    hostbyte=DID_OK and driverbyte=DRIVER_SENSE to be completed with
    BLK_STS_OK. Hence revert that commit.
    
    Fixes: e39a97353e53 ("scsi: core: return BLK_STS_OK for DID_OK in __scsi_error_from_host_byte()")
    Reported-by: Damien Le Moal <damien.lemoal@wdc.com>
    Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
    Cc: Hannes Reinecke <hare@suse.com>
    Cc: Douglas Gilbert <dgilbert@interlog.com>
    Cc: Damien Le Moal <damien.lemoal@wdc.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Lee Duncan <lduncan@suse.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3c5316a464a2b8731e26992c7adac81d8ec1ab1b
Author: Bill Kuzeja <William.Kuzeja@stratus.com>
Date:   Fri Mar 23 10:37:25 2018 -0400

    scsi: qla2xxx: Fix small memory leak in qla2x00_probe_one on probe failure
    
    commit 6d6340672ba3a99c4cf7af79c2edf7aa25595c84 upstream.
    
    The code that fixes the crashes in the following commit introduced a small
    memory leak:
    
    commit 6a2cf8d3663e ("scsi: qla2xxx: Fix crashes in qla2x00_probe_one on probe failure")
    
    Fixing this requires a bit of reworking, which I've explained. Also provide
    some code cleanup.
    
    There is a small window in qla2x00_probe_one where if qla2x00_alloc_queues
    fails, we end up never freeing req and rsp and leak 0xc0 and 0xc8 bytes
    respectively (the sizes of req and rsp).
    
    I originally put in checks to test for this condition which were based on
    the incorrect assumption that if ha->rsp_q_map and ha->req_q_map were
    allocated, then rsp and req were allocated as well. This is incorrect.
    There is a window between these allocations:
    
           ret = qla2x00_mem_alloc(ha, req_length, rsp_length, &req, &rsp);
                    goto probe_hw_failed;
    
    [if successful, both rsp and req allocated]
    
           base_vha = qla2x00_create_host(sht, ha);
                    goto probe_hw_failed;
    
           ret = qla2x00_request_irqs(ha, rsp);
                    goto probe_failed;
    
           if (qla2x00_alloc_queues(ha, req, rsp)) {
                    goto probe_failed;
    
    [if successful, now ha->rsp_q_map and ha->req_q_map allocated]
    
    To simplify this, we should just set req and rsp to NULL after we free
    them. Sounds simple enough? The problem is that req and rsp are pointers
    defined in the qla2x00_probe_one and they are not always passed by reference
    to the routines that free them.
    
    Here are paths which can free req and rsp:
    
    PATH 1:
    qla2x00_probe_one
       ret = qla2x00_mem_alloc(ha, req_length, rsp_length, &req, &rsp);
       [req and rsp are passed by reference, but if this fails, we currently
        do not NULL out req and rsp. Easily fixed]
    
    PATH 2:
    qla2x00_probe_one
       failing in qla2x00_request_irqs or qla2x00_alloc_queues
          probe_failed:
             qla2x00_free_device(base_vha);
                qla2x00_free_req_que(ha, req)
                qla2x00_free_rsp_que(ha, rsp)
    
    PATH 3:
    qla2x00_probe_one:
       failing in qla2x00_mem_alloc or qla2x00_create_host
          probe_hw_failed:
             qla2x00_free_req_que(ha, req)
             qla2x00_free_rsp_que(ha, rsp)
    
    PATH 1: This should currently work, but it doesn't because rsp and rsp are
    not set to NULL in qla2x00_mem_alloc. Easily remedied.
    
    PATH 2: req and rsp aren't passed in at all to qla2x00_free_device but are
    derived from ha->req_q_map[0] and ha->rsp_q_map[0]. These are only set up if
    qla2x00_alloc_queues succeeds.
    
    In qla2x00_free_queues, we are protected from crashing if these don't exist
    because req_qid_map and rsp_qid_map are only set on their allocation. We are
    guarded in this way:
    
            for (cnt = 0; cnt < ha->max_req_queues; cnt++) {
                    if (!test_bit(cnt, ha->req_qid_map))
                            continue;
    
    PATH 3: This works. We haven't freed req or rsp yet (or they were never
    allocated if qla2x00_mem_alloc failed), so we'll attempt to free them here.
    
    To summarize, there are a few small changes to make this work correctly and
    (and for some cleanup):
    
    1) (For PATH 1) Set *rsp and *req to NULL in case of failure in
    qla2x00_mem_alloc so these are correctly set to NULL back in
    qla2x00_probe_one
    
    2) After jumping to probe_failed: and calling qla2x00_free_device,
    explicitly set rsp and req to NULL so further calls with these pointers do
    not crash, i.e. the free queue calls in the probe_hw_failed section we fall
    through to.
    
    3) Fix return code check in the call to qla2x00_alloc_queues. We currently
    drop the return code on the floor. The probe fails but the caller of the
    probe doesn't have an error code, so it attaches to pci. This can result in
    a crash on module shutdown.
    
    4) Remove unnecessary NULL checks in qla2x00_free_req_que,
    qla2x00_free_rsp_que, and the egregious NULL checks before kfrees and vfrees
    in qla2x00_mem_free.
    
    I tested this out running a scenario where the card breaks at various times
    during initialization. I made sure I forced every error exit path in
    qla2x00_probe_one.
    
    Cc: <stable@vger.kernel.org> # v4.16
    Fixes: 6a2cf8d3663e ("scsi: qla2xxx: Fix crashes in qla2x00_probe_one on probe failure")
    Signed-off-by: Bill Kuzeja <william.kuzeja@stratus.com>
    Acked-by: Himanshu Madhani <himanshu.madhani@cavium.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0fc06286c192cf4122c16190dd2968508d33caab
Author: Johannes Thumshirn <jthumshirn@suse.de>
Date:   Fri Mar 23 14:37:05 2018 +0100

    scsi: scsi_dh: Don't look for NULL devices handlers by name
    
    commit 2ee5671e3ae35e53bb5a53a89ac8f033e4b1721f upstream.
    
    Currently scsi_dh_lookup() doesn't check for NULL as a device name. This
    combined with nvme over dm-mpath results in the following messages
    emitted by device-mapper:
    
     device-mapper: multipath: Could not failover device 259:67: Handler scsi_dh_(null) error 14.
    
    Let scsi_dh_lookup() fail fast on NULL names.
    
    [mkp: typo fix]
    
    Cc: <stable@vger.kernel.org> # v4.16
    Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Reviewed-by: Bart Van Assche <bart.vanassche@wdc.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 35ed0996e1f726c4638b3609898313f5f4013ef8
Author: J. Bruce Fields <bfields@redhat.com>
Date:   Wed Mar 21 17:19:02 2018 -0400

    nfsd: fix incorrect umasks
    
    commit 880a3a5325489a143269a8e172e7563ebf9897bc upstream.
    
    We're neglecting to clear the umask after it's set, which can cause a
    later unrelated rpc to (incorrectly) use the same umask if it happens to
    be processed by the same thread.
    
    There's a more subtle problem here too:
    
    An NFSv4 compound request is decoded all in one pass before any
    operations are executed.
    
    Currently we're setting current->fs->umask at the time we decode the
    compound.  In theory a single compound could contain multiple creates
    each setting a umask.  In that case we'd end up using whichever umask
    was passed in the *last* operation as the umask for all the creates,
    whether that was correct or not.
    
    So, we should just be saving the umask at decode time and waiting to set
    it until we actually process the corresponding operation.
    
    In practice it's unlikely any client would do multiple creates in a
    single compound.  And even if it did they'd likely be from the same
    process (hence carry the same umask).  So this is a little academic, but
    we should get it right anyway.
    
    Fixes: 47057abde515 (nfsd: add support for the umask attribute)
    Cc: stable@vger.kernel.org
    Reported-by: Lucash Stach <l.stach@pengutronix.de>
    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit afcfa5905ace03e10a3f6708dc5a6ded5569eecd
Author: Mike Kravetz <mike.kravetz@oracle.com>
Date:   Thu Apr 5 16:18:21 2018 -0700

    hugetlbfs: fix bug in pgoff overflow checking
    
    commit 5df63c2a149ae65a9ec239e7c2af44efa6f79beb upstream.
    
    This is a fix for a regression in 32 bit kernels caused by an invalid
    check for pgoff overflow in hugetlbfs mmap setup.  The check incorrectly
    specified that the size of a loff_t was the same as the size of a long.
    The regression prevents mapping hugetlbfs files at offsets greater than
    4GB on 32 bit kernels.
    
    On 32 bit kernels conversion from a page based unsigned long can not
    overflow a loff_t byte offset.  Therefore, skip this check if
    sizeof(unsigned long) != sizeof(loff_t).
    
    Link: http://lkml.kernel.org/r/20180330145402.5053-1-mike.kravetz@oracle.com
    Fixes: 63489f8e8211 ("hugetlbfs: check for pgoff value overflow")
    Reported-by: Dan Rue <dan.rue@linaro.org>
    Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
    Tested-by: Anders Roxell <anders.roxell@linaro.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Yisheng Xie <xieyisheng1@huawei.com>
    Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Nic Losby <blurbdust@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d69a746fe4d18b194f5fe3093048a2d3e7e2164c
Author: Simon Gaiser <simon@invisiblethingslab.com>
Date:   Thu Mar 15 03:43:20 2018 +0100

    xen: xenbus_dev_frontend: Fix XS_TRANSACTION_END handling
    
    commit 2a22ee6c3ab1d761bc9c04f1e4117edd55b82f09 upstream.
    
    Commit fd8aa9095a95 ("xen: optimize xenbus driver for multiple
    concurrent xenstore accesses") made a subtle change to the semantic of
    xenbus_dev_request_and_reply() and xenbus_transaction_end().
    
    Before on an error response to XS_TRANSACTION_END
    xenbus_dev_request_and_reply() would not decrement the active
    transaction counter. But xenbus_transaction_end() has always counted the
    transaction as finished regardless of the response.
    
    The new behavior is that xenbus_dev_request_and_reply() and
    xenbus_transaction_end() will always count the transaction as finished
    regardless the response code (handled in xs_request_exit()).
    
    But xenbus_dev_frontend tries to end a transaction on closing of the
    device if the XS_TRANSACTION_END failed before. Trying to close the
    transaction twice corrupts the reference count. So fix this by also
    considering a transaction closed if we have sent XS_TRANSACTION_END once
    regardless of the return code.
    
    Cc: <stable@vger.kernel.org> # 4.11
    Fixes: fd8aa9095a95 ("xen: optimize xenbus driver for multiple concurrent xenstore accesses")
    Signed-off-by: Simon Gaiser <simon@invisiblethingslab.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f2924419f27812d2cd2e2c0d6a8bf96feaac13e7
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Wed Apr 11 20:09:29 2018 +0300

    ovl: set lower layer st_dev only if setting lower st_ino
    
    commit 9f99e50d460ac7fd5f6c9b97aad0088c28c8656d upstream.
    
    For broken hardlinks, we do not return lower st_ino, so we should
    also not return lower pseudo st_dev.
    
    Fixes: a0c5ad307ac0 ("ovl: relax same fs constraint for constant st_ino")
    Cc: <stable@vger.kernel.org> #v4.15
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 63437bd1ca69a6512cb3236a03e4a4f36d0329ff
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Thu Mar 15 23:39:01 2018 +0200

    ovl: set i_ino to the value of st_ino for NFS export
    
    commit 695b46e76b62447e506cddc87e088236498008e5 upstream.
    
    Eddie Horng reported that readdir of an overlayfs directory that
    was exported via NFSv3 returns entries with d_type set to DT_UNKNOWN.
    The reason is that while preparing the response for readdirplus, nfsd
    checks inside encode_entryplus_baggage() that a child dentry's inode
    number matches the value of d_ino returns by overlayfs readdir iterator.
    
    Because the overlayfs inodes use arbitrary inode numbers that are not
    correlated with the values of st_ino/d_ino, NFSv3 falls back to not
    encoding d_type. Although this is an allowed behavior, we can fix it for
    the case of all overlayfs layers on the same underlying filesystem.
    
    When NFS export is enabled and d_ino is consistent with st_ino
    (samefs), set the same value also to i_ino in ovl_fill_inode() for all
    overlayfs inodes, nfsd readdirplus sanity checks will pass.
    ovl_fill_inode() may be called from ovl_new_inode(), before real inode
    was created with ino arg 0. In that case, i_ino will be updated to real
    upper inode i_ino on ovl_inode_init() or ovl_inode_update().
    
    Reported-by: Eddie Horng <eddiehorng.tw@gmail.com>
    Tested-by: Eddie Horng <eddiehorng.tw@gmail.com>
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Fixes: 8383f1748829 ("ovl: wire up NFS export operations")
    Cc: <stable@vger.kernel.org> #v4.16
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 081fb2c920f3c58839a59ebc84ff9ad0864d4cd0
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Mon Mar 12 10:30:41 2018 -0400

    ovl: fix lookup with middle layer opaque dir and absolute path redirects
    
    commit 3ec9b3fafcaf441cc4d46b9742cd6ec0c79f8df0 upstream.
    
    As of now if we encounter an opaque dir while looking for a dentry, we set
    d->last=true. This means that there is no need to look further in any of
    the lower layers. This works fine as long as there are no redirets or
    relative redircts. But what if there is an absolute redirect on the
    children dentry of opaque directory. We still need to continue to look into
    next lower layer. This patch fixes it.
    
    Here is an example to demonstrate the issue. Say you have following setup.
    
    upper:  /redirect (redirect=/a/b/c)
    lower1: /a/[b]/c       ([b] is opaque) (c has absolute redirect=/a/b/d/)
    lower0: /a/b/d/foo
    
    Now "redirect" dir should merge with lower1:/a/b/c/ and lower0:/a/b/d.
    Note, despite the fact lower1:/a/[b] is opaque, we need to continue to look
    into lower0 because children c has an absolute redirect.
    
    Following is a reproducer.
    
    Watch me make foo disappear:
    
     $ mkdir lower middle upper work work2 merged
     $ mkdir lower/origin
     $ touch lower/origin/foo
     $ mount -t overlay none merged/ \
             -olowerdir=lower,upperdir=middle,workdir=work2
     $ mkdir merged/pure
     $ mv merged/origin merged/pure/redirect
     $ umount merged
     $ mount -t overlay none merged/ \
             -olowerdir=middle:lower,upperdir=upper,workdir=work
     $ mv merged/pure/redirect merged/redirect
    
    Now you see foo inside a twice redirected merged dir:
    
     $ ls merged/redirect
     foo
     $ umount merged
     $ mount -t overlay none merged/ \
             -olowerdir=middle:lower,upperdir=upper,workdir=work
    
    After mount cycle you don't see foo inside the same dir:
    
     $ ls merged/redirect
    
    During middle layer lookup, the opaqueness of middle/pure is left in
    the lookup state and then middle/pure/redirect is wrongly treated as
    opaque.
    
    Fixes: 02b69b284cd7 ("ovl: lookup redirects")
    Cc: <stable@vger.kernel.org> #v4.10
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7f76bfe07c39c8d26266017198a7b9a57710485a
Author: Vivek Goyal <vgoyal@redhat.com>
Date:   Fri Mar 9 15:44:41 2018 -0500

    ovl: Set d->last properly during lookup
    
    commit 452061fd4521b2bf3225fc391dbe536e5f9c05e2 upstream.
    
    d->last signifies that this is the last layer we are looking into and there
    is no more. And that means this allows for some optimzation opportunities
    during lookup. For example, in ovl_lookup_single() we don't have to check
    for opaque xattr of a directory is this is the last layer we are looking
    into (d->last = true).
    
    But knowing for sure whether we are looking into last layer can be very
    tricky. If redirects are not enabled, then we can look at poe->numlower and
    figure out if the lookup we are about to is last layer or not. But if
    redircts are enabled then it is possible poe->numlower suggests that we are
    looking in last layer, but there is an absolute redirect present in found
    element and that redirects us to a layer in root and that means lookup will
    continue in lower layers further.
    
    For example, consider following.
    
    /upperdir/pure (opaque=y)
    /upperdir/pure/foo (opaque=y,redirect=/bar)
    /lowerdir/bar
    
    In this case pure is "pure upper". When we look for "foo", that time
    poe->numlower=0. But that alone does not mean that we will not search for a
    merge candidate in /lowerdir. Absolute redirect changes that.
    
    IOW, d->last should not be set just based on poe->numlower if redirects are
    enabled. That can lead to setting d->last while it should not have and that
    means we will not check for opaque xattr while we should have.
    
    So do this.
    
     - If redirects are not enabled, then continue to rely on poe->numlower
       information to determine if it is last layer or not.
    
     - If redirects are enabled, then set d->last = true only if this is the
       last layer in root ovl_entry (roe).
    
    Suggested-by: Amir Goldstein <amir73il@gmail.com>
    Reviewed-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Fixes: 02b69b284cd7 ("ovl: lookup redirects")
    Cc: <stable@vger.kernel.org> #v4.10
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0a419b565e4c0f179594a0d9d65de12698cd5c77
Author: Ming Lei <ming.lei@redhat.com>
Date:   Sun Apr 8 17:48:08 2018 +0800

    blk-mq: don't keep offline CPUs mapped to hctx 0
    
    commit bffa9909a6b48d8ca3398dec601bc9162a4020c4 upstream.
    
    From commit 4b855ad37194 ("blk-mq: Create hctx for each present CPU),
    blk-mq doesn't remap queue after CPU topo is changed, that said when
    some of these offline CPUs become online, they are still mapped to
    hctx 0, then hctx 0 may become the bottleneck of IO dispatch and
    completion.
    
    This patch sets up the mapping from the beginning, and aligns to
    queue mapping for PCI device (blk_mq_pci_map_queues()).
    
    Cc: Stefan Haberland <sth@linux.vnet.ibm.com>
    Cc: Keith Busch <keith.busch@intel.com>
    Cc: stable@vger.kernel.org
    Fixes: 4b855ad37194 ("blk-mq: Create hctx for each present CPU)
    Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    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 ad082271f6d74f2fb1e512ca0b356c6ade38678e
Author: Ming Lei <ming.lei@redhat.com>
Date:   Sun Apr 8 17:48:07 2018 +0800

    blk-mq: make sure that correct hctx->next_cpu is set
    
    commit a1c735fb790745f94a359df45c11df4a69760389 upstream.
    
    From commit 20e4d81393196 (blk-mq: simplify queue mapping & schedule
    with each possisble CPU), one hctx can be mapped from all offline CPUs,
    then hctx->next_cpu can be set as wrong.
    
    This patch fixes this issue by making hctx->next_cpu pointing to the
    first CPU in hctx->cpumask if all CPUs in hctx->cpumask are offline.
    
    Cc: Stefan Haberland <sth@linux.vnet.ibm.com>
    Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Fixes: 20e4d81393196 ("blk-mq: simplify queue mapping & schedule with each possisble CPU")
    Cc: stable@vger.kernel.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 a58e00dd397ba6a61f72cddfe305b10b5b4022cd
Author: Ming Lei <ming.lei@redhat.com>
Date:   Thu Apr 5 00:35:21 2018 +0800

    blk-mq: order getting budget and driver tag
    
    commit 0bca799b92807ee9be0890690f5dde7d8c6a8e25 upstream.
    
    This patch orders getting budget and driver tag by making sure to acquire
    driver tag after budget is got, this way can help to avoid the following
    race:
    
    1) before dispatch request from scheduler queue, get one budget first, then
    dequeue a request, call it request A.
    
    2) in another IO path for dispatching request B which is from hctx->dispatch,
    driver tag is got, then try to get budget in blk_mq_dispatch_rq_list(),
    unfortunately the budget is held by request A.
    
    3) meantime blk_mq_dispatch_rq_list() is called for dispatching request
    A, and try to get driver tag first, unfortunately no driver tag is
    available because the driver tag is held by request B
    
    4) both two IO pathes can't move on, and IO stall is caused.
    
    This issue can be observed when running dbench on USB storage.
    
    This patch fixes this issue by always getting budget before getting
    driver tag.
    
    Cc: stable@vger.kernel.org
    Fixes: de1482974080ec9e ("blk-mq: introduce .get_budget and .put_budget in blk_mq_ops")
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Bart Van Assche <bart.vanassche@wdc.com>
    Cc: Omar Sandoval <osandov@fb.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 e93df52ed0961cfddf08ee8c5230ff67366ba787
Author: Tejun Heo <tj@kernel.org>
Date:   Mon Apr 2 15:04:58 2018 -0700

    blk-mq: Directly schedule q->timeout_work when aborting a request
    
    commit bc6d65e6dc89c3b7ff78e4ad797117c122ffde8e upstream.
    
    Request abortion is performed by overriding deadline to now and
    scheduling timeout handling immediately.  For the latter part, the
    code was using mod_timer(timeout, 0) which can't guarantee that the
    timer runs afterwards.  Let's schedule the underlying work item
    directly instead.
    
    This fixes the hangs during probing reported by Sitsofe but it isn't
    yet clear to me how the failure can happen reliably if it's just the
    above described race condition.
    
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Reported-by: Sitsofe Wheeler <sitsofe@gmail.com>
    Reported-by: Meelis Roos <mroos@linux.ee>
    Fixes: 358f70da49d7 ("blk-mq: make blk_abort_request() trigger timeout path")
    Cc: stable@vger.kernel.org # v4.16
    Link: http://lkml.kernel.org/r/CALjAwxh-PVYFnYFCJpGOja+m5SzZ8Sa4J7ohxdK=r8NyOF-EMA@mail.gmail.com
    Link: http://lkml.kernel.org/r/alpine.LRH.2.21.1802261049140.4893@math.ut.ee
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c1d49c389ae41c17013ae40b8a591100bba2de1b
Author: Huacai Chen <chenhc@lemote.com>
Date:   Thu Apr 5 16:18:18 2018 -0700

    zboot: fix stack protector in compressed boot phase
    
    commit 7bbaf27d9c83037b6e60a818e57bdbedf6bc15be upstream.
    
    Calling __stack_chk_guard_setup() in decompress_kernel() is too late
    that stack checking always fails for decompress_kernel() itself.  So
    remove __stack_chk_guard_setup() and initialize __stack_chk_guard before
    we call decompress_kernel().
    
    Original code comes from ARM but also used for MIPS and SH, so fix them
    together.  If without this fix, compressed booting of these archs will
    fail because stack checking is enabled by default (>=4.16).
    
    Link: http://lkml.kernel.org/r/1522226933-29317-1-git-send-email-chenhc@lemote.com
    Fixes: 8779657d29c0 ("stackprotector: Introduce CONFIG_CC_STACKPROTECTOR_STRONG")
    Signed-off-by: Huacai Chen <chenhc@lemote.com>
    Acked-by: James Hogan <jhogan@kernel.org>
    Acked-by: Kees Cook <keescook@chromium.org>
    Acked-by: Rich Felker <dalias@libc.org>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: Russell King <linux@arm.linux.org.uk>
    Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f52f74eb04680996fa13e5e8cdbbf027cb6551d8
Author: Yury Norov <ynorov@caviumnetworks.com>
Date:   Thu Apr 5 16:18:25 2018 -0700

    lib: fix stall in __bitmap_parselist()
    
    commit 8351760ff5b2042039554b4948ddabaac644a976 upstream.
    
    syzbot is catching stalls at __bitmap_parselist()
    (https://syzkaller.appspot.com/bug?id=ad7e0351fbc90535558514a71cd3edc11681997a).
    The trigger is
    
      unsigned long v = 0;
      bitmap_parselist("7:,", &v, BITS_PER_LONG);
    
    which results in hitting infinite loop at
    
        while (a <= b) {
                off = min(b - a + 1, used_size);
                bitmap_set(maskp, a, off);
                a += group_size;
        }
    
    due to used_size == group_size == 0.
    
    Link: http://lkml.kernel.org/r/20180404162647.15763-1-ynorov@caviumnetworks.com
    Fixes: 0a5ce0831d04382a ("lib/bitmap.c: make bitmap_parselist() thread-safe and much faster")
    Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
    Reported-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Reported-by: syzbot <syzbot+6887cbb011c8054e8a3d@syzkaller.appspotmail.com>
    Cc: Noam Camus <noamca@mellanox.com>
    Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
    Cc: Matthew Wilcox <mawilcox@microsoft.com>
    Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2695210d8a0b58005d166e65da375e176ccdcd5e
Author: Keith Busch <keith.busch@intel.com>
Date:   Mon Mar 19 10:53:50 2018 -0600

    nvme: Skip checking heads without namespaces
    
    commit 2079699c10c8c60a9572540c2f77d045abf036eb upstream.
    
    If a task is holding a reference to a namespace on a removed controller,
    the head will not be released. If the same controller is added again
    later, its namespaces may not be successfully added. Instead, the user
    will see kernel message "Duplicate IDs for nsid <X>".
    
    This patch fixes that by skipping heads that don't have namespaces when
    considering if a new namespace is safe to add.
    
    Reported-by: Alex Gagniuc <Alex_Gagniuc@Dellteam.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Keith Busch <keith.busch@intel.com>
    Reviewed-by: Max Gurtovoy <maxg@mellanox.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7f1753c13b52e090375c8b16845e7676943978f2
Author: Bart Van Assche <bart.vanassche@wdc.com>
Date:   Mon Mar 19 11:46:13 2018 -0700

    block: Change a rcu_read_{lock,unlock}_sched() pair into rcu_read_{lock,unlock}()
    
    commit 818e0fa293ca836eba515615c64680ea916fd7cd upstream.
    
    scsi_device_quiesce() uses synchronize_rcu() to guarantee that the
    effect of blk_set_preempt_only() will be visible for percpu_ref_tryget()
    calls that occur after the queue unfreeze by using the approach
    explained in https://lwn.net/Articles/573497/. The rcu read lock and
    unlock calls in blk_queue_enter() form a pair with the synchronize_rcu()
    call in scsi_device_quiesce(). Both scsi_device_quiesce() and
    blk_queue_enter() must either use regular RCU or RCU-sched.
    Since neither the RCU-protected code in blk_queue_enter() nor
    blk_queue_usage_counter_release() sleeps, regular RCU protection
    is sufficient. Note: scsi_device_quiesce() does not have to be
    modified since it already uses synchronize_rcu().
    
    Reported-by: Tejun Heo <tj@kernel.org>
    Fixes: 3a0a529971ec ("block, scsi: Make SCSI quiesce and resume work reliably")
    Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
    Acked-by: Tejun Heo <tj@kernel.org>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Hannes Reinecke <hare@suse.com>
    Cc: Ming Lei <ming.lei@redhat.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Johannes Thumshirn <jthumshirn@suse.de>
    Cc: Oleksandr Natalenko <oleksandr@natalenko.name>
    Cc: Martin Steigerwald <martin@lichtvoll.de>
    Cc: stable@vger.kernel.org # v4.15
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fa059529057ea8c35f836127a29bd7349be1dbac
Author: Yunlong Song <yunlong.song@huawei.com>
Date:   Mon Jan 29 11:37:45 2018 +0800

    f2fs: fix heap mode to reset it back
    
    commit b94929d975c8423defc9aededb0f499ff936b509 upstream.
    
    Commit 7a20b8a61eff81bdb7097a578752a74860e9d142 ("f2fs: allocate node
    and hot data in the beginning of partition") introduces another mount
    option, heap, to reset it back. But it does not do anything for heap
    mode, so fix it.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
    Reviewed-by: Chao Yu <yuchao0@huawei.com>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3d3a61aa49cc13387e8e84282ac740ed78b7a4b7
Author: Eric Biggers <ebiggers@google.com>
Date:   Wed Mar 28 10:57:22 2018 -0700

    sunrpc: remove incorrect HMAC request initialization
    
    commit f3aefb6a7066e24bfea7fcf1b07907576de69d63 upstream.
    
    make_checksum_hmac_md5() is allocating an HMAC transform and doing
    crypto API calls in the following order:
    
        crypto_ahash_init()
        crypto_ahash_setkey()
        crypto_ahash_digest()
    
    This is wrong because it makes no sense to init() the request before a
    key has been set, given that the initial state depends on the key.  And
    digest() is short for init() + update() + final(), so in this case
    there's no need to explicitly call init() at all.
    
    Before commit 9fa68f620041 ("crypto: hash - prevent using keyed hashes
    without setting key") the extra init() had no real effect, at least for
    the software HMAC implementation.  (There are also hardware drivers that
    implement HMAC-MD5, and it's not immediately obvious how gracefully they
    handle init() before setkey().)  But now the crypto API detects this
    incorrect initialization and returns -ENOKEY.  This is breaking NFS
    mounts in some cases.
    
    Fix it by removing the incorrect call to crypto_ahash_init().
    
    Reported-by: Michael Young <m.a.young@durham.ac.uk>
    Fixes: 9fa68f620041 ("crypto: hash - prevent using keyed hashes without setting key")
    Fixes: fffdaef2eb4a ("gss_krb5: Add support for rc4-hmac encryption")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bb46410a036a1f680e5875cf1dfc72a3827e7e4a
Author: Li RongQing <lirongqing@baidu.com>
Date:   Tue Apr 10 09:16:06 2018 +0800

    x86/apic: Fix signedness bug in APIC ID validity checks
    
    commit a774635db5c430cbf21fa5d2f2df3d23aaa8e782 upstream.
    
    The APIC ID as parsed from ACPI MADT is validity checked with the
    apic->apic_id_valid() callback, which depends on the selected APIC type.
    
    For non X2APIC types APIC IDs >= 0xFF are invalid, but values > 0x7FFFFFFF
    are detected as valid. This happens because the 'apicid' argument of the
    apic_id_valid() callback is type 'int'. So the resulting comparison
    
       apicid < 0xFF
    
    evaluates to true for all unsigned int values > 0x7FFFFFFF which are handed
    to default_apic_id_valid(). As a consequence, invalid APIC IDs in !X2APIC
    mode are considered valid and accounted as possible CPUs.
    
    Change the apicid argument type of the apic_id_valid() callback to u32 so
    the evaluation is unsigned and returns the correct result.
    
    [ tglx: Massaged changelog ]
    
    Signed-off-by: Li RongQing <lirongqing@baidu.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Cc: jgross@suse.com
    Cc: Dou Liyang <douly.fnst@cn.fujitsu.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: hpa@zytor.com
    Link: https://lkml.kernel.org/r/1523322966-10296-1-git-send-email-lirongqing@baidu.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit eb98d19a5d1aa87db6686e3d7b1b629ae562e25a
Author: Dmitry V. Levin <ldv@altlinux.org>
Date:   Thu Apr 5 07:32:10 2018 +0300

    x86/uapi: Fix asm/bootparam.h userspace compilation errors
    
    commit 9820e1c3376c641299624dd24646aed3167ad5b1 upstream.
    
    Consistently use types provided by <linux/types.h> to fix the following
    asm/bootparam.h userspace compilation errors:
    
            /usr/include/asm/bootparam.h:140:2: error: unknown type name 'u16'
              u16 version;
            /usr/include/asm/bootparam.h:141:2: error: unknown type name 'u16'
              u16 compatible_version;
            /usr/include/asm/bootparam.h:142:2: error: unknown type name 'u16'
              u16 pm_timer_address;
            /usr/include/asm/bootparam.h:143:2: error: unknown type name 'u16'
              u16 num_cpus;
            /usr/include/asm/bootparam.h:144:2: error: unknown type name 'u64'
              u64 pci_mmconfig_base;
            /usr/include/asm/bootparam.h:145:2: error: unknown type name 'u32'
              u32 tsc_khz;
            /usr/include/asm/bootparam.h:146:2: error: unknown type name 'u32'
              u32 apic_khz;
            /usr/include/asm/bootparam.h:147:2: error: unknown type name 'u8'
              u8 standard_ioapic;
            /usr/include/asm/bootparam.h:148:2: error: unknown type name 'u8'
              u8 cpu_ids[255];
    
    Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
    Acked-by: Jan Kiszka <jan.kiszka@siemens.com>
    Cc: <stable@vger.kernel.org> # v4.16
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Fixes: 4a362601baa6 ("x86/jailhouse: Add infrastructure for running in non-root cell")
    Link: http://lkml.kernel.org/r/20180405043210.GA13254@altlinux.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a63b8d9a84ae4a2ebca459300300b4cb18ba3b8b
Author: Toke Høiland-Jørgensen <toke@toke.dk>
Date:   Tue Feb 27 19:09:44 2018 +0200

    ath9k: Protect queue draining by rcu_read_lock()
    
    commit 182b1917109892ab9f26d66bfdcbc4ba6f0a0a65 upstream.
    
    When ath9k was switched over to use the mac80211 intermediate queues,
    node cleanup now drains the mac80211 queues. However, this call path is
    not protected by rcu_read_lock() as it was previously entirely internal
    to the driver which uses its own locking.
    
    This leads to a possible rcu_dereference() without holding
    rcu_read_lock(); but only if a station is cleaned up while having
    packets queued on the TXQ. Fix this by adding the rcu_read_lock() to the
    caller in ath9k.
    
    Fixes: 50f08edf9809 ("ath9k: Switch to using mac80211 intermediate software queues.")
    Cc: stable@vger.kernel.org
    Reported-by: Ben Greear <greearb@candelatech.com>
    Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d8f243380257c808972227d126ae12333c3b95b0
Author: Yazen Ghannam <yazen.ghannam@amd.com>
Date:   Wed Feb 21 11:18:59 2018 +0100

    x86/mce/AMD: Get address from already initialized block
    
    commit 27bd59502702fe51d9eb00450a75b727ec6bfcb4 upstream.
    
    The block address is saved after the block is initialized when
    threshold_init_device() is called.
    
    Use the saved block address, if available, rather than trying to
    rediscover it.
    
    This will avoid a call trace, when resuming from suspend, due to the
    rdmsr_safe_on_cpu() call in get_block_address(). The rdmsr_safe_on_cpu()
    call issues an IPI but we're running with interrupts disabled. This
    triggers:
    
        WARNING: CPU: 0 PID: 11523 at kernel/smp.c:291 smp_call_function_single+0xdc/0xe0
    
    Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Cc: <stable@vger.kernel.org> # 4.14.x
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: linux-edac <linux-edac@vger.kernel.org>
    Link: http://lkml.kernel.org/r/20180221101900.10326-8-bp@alien8.de
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ef1d5fcc6296c38537c0942c7c509c1e170456b8
Author: Yazen Ghannam <yazen.ghannam@amd.com>
Date:   Wed Feb 21 11:18:58 2018 +0100

    x86/mce/AMD, EDAC/mce_amd: Enumerate Reserved SMCA bank type
    
    commit 68627a697c195937672ce07683094c72b1174786 upstream.
    
    Currently, bank 4 is reserved on Fam17h, so we chose not to initialize
    bank 4 in the smca_banks array. This means that when we check if a bank
    is initialized, like during boot or resume, we will see that bank 4 is
    not initialized and try to initialize it.
    
    This will cause a call trace, when resuming from suspend, due to
    rdmsr_*on_cpu() calls in the init path. The rdmsr_*on_cpu() calls issue
    an IPI but we're running with interrupts disabled. This triggers:
    
      WARNING: CPU: 0 PID: 11523 at kernel/smp.c:291 smp_call_function_single+0xdc/0xe0
      ...
    
    Reserved banks will be read-as-zero, so their MCA_IPID register will be
    zero. So, like the smca_banks array, the threshold_banks array will not
    have an entry for a reserved bank since all its MCA_MISC* registers will
    be zero.
    
    Enumerate a "Reserved" bank type that matches on a HWID_MCATYPE of 0,0.
    
    Use the "Reserved" type when checking if a bank is reserved. It's
    possible that other bank numbers may be reserved on future systems.
    
    Don't try to find the block address on reserved banks.
    
    Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Cc: <stable@vger.kernel.org> # 4.14.x
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: linux-edac <linux-edac@vger.kernel.org>
    Link: http://lkml.kernel.org/r/20180221101900.10326-7-bp@alien8.de
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cd1081d76baeb2c8f161713a0c6ec843c3886327
Author: Yazen Ghannam <yazen.ghannam@amd.com>
Date:   Wed Feb 21 11:18:57 2018 +0100

    x86/mce/AMD: Pass the bank number to smca_get_bank_type()
    
    commit e5d6a126d4c473499f354254a15ca0c2d8c84ca3 upstream.
    
    Pass the bank number to smca_get_bank_type() since that's all we need.
    
    Also, we should compare the bank number to MAX_NR_BANKS (size of the
    smca_banks array) not the number of bank types. Bank types are reused
    for multiple banks, so the number of types can be different from the
    number of banks in a system and thus we could return an invalid bank
    type.
    
    Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Cc: <stable@vger.kernel.org> # 4.14.x
    Cc: <stable@vger.kernel.org> # 4.14.x: 11cf887728a3 x86/MCE/AMD: Define a function to get SMCA bank type
    Cc: <stable@vger.kernel.org> # 4.14.x: c6708d50f166 x86/MCE: Report only DRAM ECC as memory errors on AMD systems
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: linux-edac <linux-edac@vger.kernel.org>
    Link: http://lkml.kernel.org/r/20180221101900.10326-6-bp@alien8.de
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0bf649dc6b8dff4a2871f61b7da4cb6d2fcca4b1
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Fri Feb 16 16:26:57 2018 +0100

    radeon: hide pointless #warning when compile testing
    
    commit c02216acf4177c4411d33735c81cad687790fa59 upstream.
    
    In randconfig testing, we sometimes get this warning:
    
    drivers/gpu/drm/radeon/radeon_object.c: In function 'radeon_bo_create':
    drivers/gpu/drm/radeon/radeon_object.c:242:2: error: #warning Please enable CONFIG_MTRR and CONFIG_X86_PAT for better performance thanks to write-combining [-Werror=cpp]
     #warning Please enable CONFIG_MTRR and CONFIG_X86_PAT for better performance \
    
    This is rather annoying since almost all other code produces no build-time
    output unless we have found a real bug. We already fixed this in the
    amdgpu driver in commit 31bb90f1cd08 ("drm/amdgpu: shut up #warning for
    compile testing") by adding a CONFIG_COMPILE_TEST check last year and
    agreed to do the same here, but both Michel and I then forgot about it
    until I came across the issue again now.
    
    For stable kernels, as this is one of very few remaining randconfig
    warnings in 4.14.
    
    Cc: stable@vger.kernel.org
    Link: https://patchwork.kernel.org/patch/9550009/
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 122a80f16ee6d8bb3cd4e3b81a9bf32cda2ba61d
Author: Prashant Bhole <bhole_prashant_q7@lab.ntt.co.jp>
Date:   Mon Apr 9 19:03:46 2018 +0900

    perf/core: Fix use-after-free in uprobe_perf_close()
    
    commit 621b6d2ea297d0fb6030452c5bcd221f12165fcf upstream.
    
    A use-after-free bug was caught by KASAN while running usdt related
    code (BCC project. bcc/tests/python/test_usdt2.py):
    
            ==================================================================
            BUG: KASAN: use-after-free in uprobe_perf_close+0x222/0x3b0
            Read of size 4 at addr ffff880384f9b4a4 by task test_usdt2.py/870
    
            CPU: 4 PID: 870 Comm: test_usdt2.py Tainted: G        W         4.16.0-next-20180409 #215
            Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014
            Call Trace:
             dump_stack+0xc7/0x15b
             ? show_regs_print_info+0x5/0x5
             ? printk+0x9c/0xc3
             ? kmsg_dump_rewind_nolock+0x6e/0x6e
             ? uprobe_perf_close+0x222/0x3b0
             print_address_description+0x83/0x3a0
             ? uprobe_perf_close+0x222/0x3b0
             kasan_report+0x1dd/0x460
             ? uprobe_perf_close+0x222/0x3b0
             uprobe_perf_close+0x222/0x3b0
             ? probes_open+0x180/0x180
             ? free_filters_list+0x290/0x290
             trace_uprobe_register+0x1bb/0x500
             ? perf_event_attach_bpf_prog+0x310/0x310
             ? probe_event_disable+0x4e0/0x4e0
             perf_uprobe_destroy+0x63/0xd0
             _free_event+0x2bc/0xbd0
             ? lockdep_rcu_suspicious+0x100/0x100
             ? ring_buffer_attach+0x550/0x550
             ? kvm_sched_clock_read+0x1a/0x30
             ? perf_event_release_kernel+0x3e4/0xc00
             ? __mutex_unlock_slowpath+0x12e/0x540
             ? wait_for_completion+0x430/0x430
             ? lock_downgrade+0x3c0/0x3c0
             ? lock_release+0x980/0x980
             ? do_raw_spin_trylock+0x118/0x150
             ? do_raw_spin_unlock+0x121/0x210
             ? do_raw_spin_trylock+0x150/0x150
             perf_event_release_kernel+0x5d4/0xc00
             ? put_event+0x30/0x30
             ? fsnotify+0xd2d/0xea0
             ? sched_clock_cpu+0x18/0x1a0
             ? __fsnotify_update_child_dentry_flags.part.0+0x1b0/0x1b0
             ? pvclock_clocksource_read+0x152/0x2b0
             ? pvclock_read_flags+0x80/0x80
             ? kvm_sched_clock_read+0x1a/0x30
             ? sched_clock_cpu+0x18/0x1a0
             ? pvclock_clocksource_read+0x152/0x2b0
             ? locks_remove_file+0xec/0x470
             ? pvclock_read_flags+0x80/0x80
             ? fcntl_setlk+0x880/0x880
             ? ima_file_free+0x8d/0x390
             ? lockdep_rcu_suspicious+0x100/0x100
             ? ima_file_check+0x110/0x110
             ? fsnotify+0xea0/0xea0
             ? kvm_sched_clock_read+0x1a/0x30
             ? rcu_note_context_switch+0x600/0x600
             perf_release+0x21/0x40
             __fput+0x264/0x620
             ? fput+0xf0/0xf0
             ? do_raw_spin_unlock+0x121/0x210
             ? do_raw_spin_trylock+0x150/0x150
             ? SyS_fchdir+0x100/0x100
             ? fsnotify+0xea0/0xea0
             task_work_run+0x14b/0x1e0
             ? task_work_cancel+0x1c0/0x1c0
             ? copy_fd_bitmaps+0x150/0x150
             ? vfs_read+0xe5/0x260
             exit_to_usermode_loop+0x17b/0x1b0
             ? trace_event_raw_event_sys_exit+0x1a0/0x1a0
             do_syscall_64+0x3f6/0x490
             ? syscall_return_slowpath+0x2c0/0x2c0
             ? lockdep_sys_exit+0x1f/0xaa
             ? syscall_return_slowpath+0x1a3/0x2c0
             ? lockdep_sys_exit+0x1f/0xaa
             ? prepare_exit_to_usermode+0x11c/0x1e0
             ? enter_from_user_mode+0x30/0x30
            random: crng init done
             ? __put_user_4+0x1c/0x30
             entry_SYSCALL_64_after_hwframe+0x3d/0xa2
            RIP: 0033:0x7f41d95f9340
            RSP: 002b:00007fffe71e4268 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
            RAX: 0000000000000000 RBX: 000000000000000d RCX: 00007f41d95f9340
            RDX: 0000000000000000 RSI: 0000000000002401 RDI: 000000000000000d
            RBP: 0000000000000000 R08: 00007f41ca8ff700 R09: 00007f41d996dd1f
            R10: 00007fffe71e41e0 R11: 0000000000000246 R12: 00007fffe71e4330
            R13: 0000000000000000 R14: fffffffffffffffc R15: 00007fffe71e4290
    
            Allocated by task 870:
             kasan_kmalloc+0xa0/0xd0
             kmem_cache_alloc_node+0x11a/0x430
             copy_process.part.19+0x11a0/0x41c0
             _do_fork+0x1be/0xa20
             do_syscall_64+0x198/0x490
             entry_SYSCALL_64_after_hwframe+0x3d/0xa2
    
            Freed by task 0:
             __kasan_slab_free+0x12e/0x180
             kmem_cache_free+0x102/0x4d0
             free_task+0xfe/0x160
             __put_task_struct+0x189/0x290
             delayed_put_task_struct+0x119/0x250
             rcu_process_callbacks+0xa6c/0x1b60
             __do_softirq+0x238/0x7ae
    
            The buggy address belongs to the object at ffff880384f9b480
             which belongs to the cache task_struct of size 12928
    
    It occurs because task_struct is freed before perf_event which refers
    to the task and task flags are checked while teardown of the event.
    perf_event_alloc() assigns task_struct to hw.target of perf_event,
    but there is no reference counting for it.
    
    As a fix we get_task_struct() in perf_event_alloc() at above mentioned
    assignment and put_task_struct() in _free_event().
    
    Signed-off-by: Prashant Bhole <bhole_prashant_q7@lab.ntt.co.jp>
    Reviewed-by: Oleg Nesterov <oleg@redhat.com>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: <stable@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Fixes: 63b6da39bb38e8f1a1ef3180d32a39d6 ("perf: Fix perf_event_exit_task() race")
    Link: http://lkml.kernel.org/r/20180409100346.6416-1-bhole_prashant_q7@lab.ntt.co.jp
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9df296eedc87a301860d7e411e28d3710971e7e9
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Wed Mar 7 16:02:24 2018 +0200

    perf intel-pt: Fix timestamp following overflow
    
    commit 91d29b288aed3406caf7c454bf2b898c96cfd177 upstream.
    
    timestamp_insn_cnt is used to estimate the timestamp based on the number of
    instructions since the last known timestamp.
    
    If the estimate is not accurate enough decoding might not be correctly
    synchronized with side-band events causing more trace errors.
    
    However there are always timestamps following an overflow, so the
    estimate is not needed and can indeed result in more errors.
    
    Suppress the estimate by setting timestamp_insn_cnt to zero.
    
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/1520431349-30689-5-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d7efb7e1583009a3ab761e0a7e68f55038772cf8
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Wed Mar 7 16:02:23 2018 +0200

    perf intel-pt: Fix error recovery from missing TIP packet
    
    commit 1c196a6c771c47a2faa63d38d913e03284f73a16 upstream.
    
    When a TIP packet is expected but there is a different packet, it is an
    error. However the unexpected packet might be something important like a
    TSC packet, so after the error, it is necessary to continue from there,
    rather than the next packet. That is achieved by setting pkt_step to
    zero.
    
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/1520431349-30689-4-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6bf420a0a6399a4f53834eae33d64d35e544be61
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Wed Mar 7 16:02:22 2018 +0200

    perf intel-pt: Fix sync_switch
    
    commit 63d8e38f6ae6c36dd5b5ba0e8c112e8861532ea2 upstream.
    
    sync_switch is a facility to synchronize decoding more closely with the
    point in the kernel when the context actually switched.
    
    The flag when sync_switch is enabled was global to the decoding, whereas
    it is really specific to the CPU.
    
    The trace data for different CPUs is put on different queues, so add
    sync_switch to the intel_pt_queue structure and use that in preference
    to the global setting in the intel_pt structure.
    
    That fixes problems decoding one CPU's trace because sync_switch was
    disabled on a different CPU's queue.
    
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/1520431349-30689-3-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8c471816427ec4a60f0afaa9d294c85fbd766470
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Wed Mar 7 16:02:21 2018 +0200

    perf intel-pt: Fix overlap detection to identify consecutive buffers correctly
    
    commit 117db4b27bf08dba412faf3924ba55fe970c57b8 upstream.
    
    Overlap detection was not not updating the buffer's 'consecutive' flag.
    Marking buffers consecutive has the advantage that decoding begins from
    the start of the buffer instead of the first PSB. Fix overlap detection
    to identify consecutive buffers correctly.
    
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/1520431349-30689-2-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 010b86d080b4ba590340afab8f095ce64f10aeeb
Author: Nicholas Piggin <npiggin@gmail.com>
Date:   Fri Apr 6 03:56:30 2018 +1000

    KVM: PPC: Book3S HV: trace_tlbie must not be called in realmode
    
    commit 19ce7909ed11c49f7eddf59e7f49cd3062bf83d5 upstream.
    
    This crashes with a "Bad real address for load" attempting to load
    from the vmalloc region in realmode (faulting address is in DAR).
    
      Oops: Bad interrupt in KVM entry/exit code, sig: 6 [#1]
      LE SMP NR_CPUS=2048 NUMA PowerNV
      CPU: 53 PID: 6582 Comm: qemu-system-ppc Not tainted 4.16.0-01530-g43d1859f0994
      NIP:  c0000000000155ac LR: c0000000000c2430 CTR: c000000000015580
      REGS: c000000fff76dd80 TRAP: 0200   Not tainted  (4.16.0-01530-g43d1859f0994)
      MSR:  9000000000201003 <SF,HV,ME,RI,LE>  CR: 48082222  XER: 00000000
      CFAR: 0000000102900ef0 DAR: d00017fffd941a28 DSISR: 00000040 SOFTE: 3
      NIP [c0000000000155ac] perf_trace_tlbie+0x2c/0x1a0
      LR [c0000000000c2430] do_tlbies+0x230/0x2f0
    
    I suspect the reason is the per-cpu data is not in the linear chunk.
    This could be restored if that was able to be fixed, but for now,
    just remove the tracepoints.
    
    Fixes: 0428491cba92 ("powerpc/mm: Trace tlbie(l) instructions")
    Cc: stable@vger.kernel.org # v4.13+
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 30c1ec70c157e652c5de749ef107e99fdb236647
Author: Dexuan Cui <decui@microsoft.com>
Date:   Thu Mar 15 14:21:08 2018 +0000

    PCI: hv: Fix 2 hang issues in hv_compose_msi_msg()
    
    commit de0aa7b2f97d348ba7d1e17a00744c989baa0cb6 upstream.
    
    1. With the patch "x86/vector/msi: Switch to global reservation mode",
    the recent v4.15 and newer kernels always hang for 1-vCPU Hyper-V VM
    with SR-IOV. This is because when we reach hv_compose_msi_msg() by
    request_irq() -> request_threaded_irq() ->__setup_irq()->irq_startup()
    -> __irq_startup() -> irq_domain_activate_irq() -> ... ->
    msi_domain_activate() -> ... -> hv_compose_msi_msg(), local irq is
    disabled in __setup_irq().
    
    Note: when we reach hv_compose_msi_msg() by another code path:
    pci_enable_msix_range() -> ... -> irq_domain_activate_irq() -> ... ->
    hv_compose_msi_msg(), local irq is not disabled.
    
    hv_compose_msi_msg() depends on an interrupt from the host.
    With interrupts disabled, a UP VM always hangs in the busy loop in
    the function, because the interrupt callback hv_pci_onchannelcallback()
    can not be called.
    
    We can do nothing but work it around by polling the channel. This
    is ugly, but we don't have any other choice.
    
    2. If the host is ejecting the VF device before we reach
    hv_compose_msi_msg(), in a UP VM, we can hang in hv_compose_msi_msg()
    forever, because at this time the host doesn't respond to the
    CREATE_INTERRUPT request. This issue exists the first day the
    pci-hyperv driver appears in the kernel.
    
    Luckily, this can also by worked around by polling the channel
    for the PCI_EJECT message and hpdev->state, and by checking the
    PCI vendor ID.
    
    Note: actually the above 2 issues also happen to a SMP VM, if
    "hbus->hdev->channel->target_cpu == smp_processor_id()" is true.
    
    Fixes: 4900be83602b ("x86/vector/msi: Switch to global reservation mode")
    Tested-by: Adrian Suhov <v-adsuho@microsoft.com>
    Tested-by: Chris Valean <v-chvale@microsoft.com>
    Signed-off-by: Dexuan Cui <decui@microsoft.com>
    Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Reviewed-by: Michael Kelley <mikelley@microsoft.com>
    Acked-by: Haiyang Zhang <haiyangz@microsoft.com>
    Cc: <stable@vger.kernel.org>
    Cc: Stephen Hemminger <sthemmin@microsoft.com>
    Cc: K. Y. Srinivasan <kys@microsoft.com>
    Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
    Cc: Jack Morgenstein <jackm@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bcd07c4c5e581286deb6eaf6b4b096cf0282e8b4
Author: Dexuan Cui <decui@microsoft.com>
Date:   Thu Mar 15 14:20:53 2018 +0000

    PCI: hv: Serialize the present and eject work items
    
    commit 021ad274d7dc31611d4f47f7dd4ac7a224526f30 upstream.
    
    When we hot-remove the device, we first receive a PCI_EJECT message and
    then receive a PCI_BUS_RELATIONS message with bus_rel->device_count == 0.
    
    The first message is offloaded to hv_eject_device_work(), and the second
    is offloaded to pci_devices_present_work(). Both the paths can be running
    list_del(&hpdev->list_entry), causing general protection fault, because
    system_wq can run them concurrently.
    
    The patch eliminates the race condition.
    
    Since access to present/eject work items is serialized, we do not need the
    hbus->enum_sem anymore, so remove it.
    
    Fixes: 4daace0d8ce8 ("PCI: hv: Add paravirtual PCI front-end for Microsoft Hyper-V VMs")
    Link: https://lkml.kernel.org/r/KL1P15301MB00064DA6B4D221123B5241CFBFD70@KL1P15301MB0006.APCP153.PROD.OUTLOOK.COM
    Tested-by: Adrian Suhov <v-adsuho@microsoft.com>
    Tested-by: Chris Valean <v-chvale@microsoft.com>
    Signed-off-by: Dexuan Cui <decui@microsoft.com>
    [lorenzo.pieralisi@arm.com: squashed semaphore removal patch]
    Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Reviewed-by: Michael Kelley <mikelley@microsoft.com>
    Acked-by: Haiyang Zhang <haiyangz@microsoft.com>
    Cc: <stable@vger.kernel.org> # v4.6+
    Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
    Cc: Jack Morgenstein <jackm@mellanox.com>
    Cc: Stephen Hemminger <sthemmin@microsoft.com>
    Cc: K. Y. Srinivasan <kys@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1c2c43fa9a769bad910b2994d420e8a4fdbc42a7
Author: Dexuan Cui <decui@microsoft.com>
Date:   Tue Mar 27 15:01:02 2018 -0700

    Drivers: hv: vmbus: do not mark HV_PCIE as perf_device
    
    commit 238064f13d057390a8c5e1a6a80f4f0a0ec46499 upstream.
    
    The pci-hyperv driver's channel callback hv_pci_onchannelcallback() is not
    really a hot path, so we don't need to mark it as a perf_device, meaning
    with this patch all HV_PCIE channels' target_cpu will be CPU0.
    
    Signed-off-by: Dexuan Cui <decui@microsoft.com>
    Cc: stable@vger.kernel.org
    Cc: Stephen Hemminger <sthemmin@microsoft.com>
    Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 15229eba3ce742a7aed56a7446aa3112fb61e6c6
Author: Luca Coelho <luciano.coelho@intel.com>
Date:   Wed Mar 28 11:15:09 2018 +0300

    iwlwifi: add a bunch of new 9000 PCI IDs
    
    commit 9e5053ad9d590e095829a8bb07adbbdbd893f0f9 upstream.
    
    A lot of new PCI IDs were added for the 9000 series.  Add them to the
    list of supported PCI IDs.
    
    Cc: stable@vger.kernel.org # 4.13+
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f628af5d6b1ed4bf828ae2fe4ce8a94bb7c24dcf
Author: Helge Deller <deller@gmx.de>
Date:   Sat Mar 24 21:18:25 2018 +0100

    parisc: Fix HPMC handler by increasing size to multiple of 16 bytes
    
    commit d5654e156bc4d68a87bbaa6d7e020baceddf6e68 upstream.
    
    Make sure that the HPMC (High Priority Machine Check) handler is 16-byte
    aligned and that it's length in the IVT is a multiple of 16 bytes.
    Otherwise PDC may decide not to call the HPMC crash handler.
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e3b14f0d0cf061ff4e881d277dc852b0fa389676
Author: Helge Deller <deller@gmx.de>
Date:   Sun Mar 25 23:53:22 2018 +0200

    parisc: Fix out of array access in match_pci_device()
    
    commit 615b2665fd20c327b631ff1e79426775de748094 upstream.
    
    As found by the ubsan checker, the value of the 'index' variable can be
    out of range for the bc[] array:
    
    UBSAN: Undefined behaviour in arch/parisc/kernel/drivers.c:655:21
    index 6 is out of range for type 'char [6]'
    Backtrace:
     [<104fa850>] __ubsan_handle_out_of_bounds+0x68/0x80
     [<1019d83c>] check_parent+0xc0/0x170
     [<1019d91c>] descend_children+0x30/0x6c
     [<1059e164>] device_for_each_child+0x60/0x98
     [<1019cd54>] parse_tree_node+0x40/0x54
     [<1019d86c>] check_parent+0xf0/0x170
     [<1019d91c>] descend_children+0x30/0x6c
     [<1059e164>] device_for_each_child+0x60/0x98
     [<1019d938>] descend_children+0x4c/0x6c
     [<1059e164>] device_for_each_child+0x60/0x98
     [<1019cd54>] parse_tree_node+0x40/0x54
     [<1019cffc>] hwpath_to_device+0xa4/0xc4
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a49781b63258bf7975a427b00cd72cafa6de0288
Author: Corey Minyard <cminyard@mvista.com>
Date:   Wed Feb 28 08:09:49 2018 -0600

    ipmi: Fix some error cleanup issues
    
    commit cc095f0ac1f7c200e51a5c2a78a43c9f42049dbb upstream.
    
    device_remove_group() was called on any cleanup, even if the
    device attrs had not been added yet.  That can occur in certain
    error scenarios, so add a flag to know if it has been added.
    
    Also make sure we remove the dev if we added it ourselves.
    
    Signed-off-by: Corey Minyard <cminyard@mvista.com>
    Cc: stable@vger.kernel.org # 4.15
    Cc: Laura Abbott <labbott@redhat.com>
    Tested-by: Bill Perkins <wmp@grnwood.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7561e2e376856500cc6bc47fda79e8f0847c4f41
Author: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Date:   Fri Feb 9 09:50:34 2018 -0500

    media: v4l: vsp1: Fix header display list status check in continuous mode
    
    commit 613928e85317b945c863bb893f5737d2f22f5425 upstream.
    
    To allow dual pipelines utilising two WPF entities when available, the
    VSP was updated to support header-mode display list in continuous
    pipelines.
    
    A small bug in the status check of the command register causes the
    second pipeline to be directly afflicted by the running of the first;
    appearing as a perceived performance issue with stuttering display.
    
    Fix the vsp1_dl_list_hw_update_pending() call to ensure that the read
    comparison corresponds to the correct pipeline.
    
    Fixes: eaf4bfad6ad8 ("v4l: vsp1: Add support for header display lists in continuous mode")
    
    Cc: "Stable v4.14+" <stable@vger.kernel.org>
    Signed-off-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
    Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 898df42767a1c5957550d8b6e569cdf4a33f0aa0
Author: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Date:   Wed Mar 28 13:59:22 2018 -0400

    media: v4l2-compat-ioctl32: don't oops on overlay
    
    commit 85ea29f19eab56ec16ec6b92bc67305998706afa upstream.
    
    At put_v4l2_window32(), it tries to access kp->clips. However,
    kp points to an userspace pointer. So, it should be obtained
    via get_user(), otherwise it can OOPS:
    
     vivid-000: ==================  END STATUS  ==================
     BUG: unable to handle kernel paging request at 00000000fffb18e0
     IP: [<ffffffffc05468d9>] __put_v4l2_format32+0x169/0x220 [videodev]
     PGD 3f5776067 PUD 3f576f067 PMD 3f5769067 PTE 800000042548f067
     Oops: 0001 [#1] SMP
     Modules linked in: vivid videobuf2_vmalloc videobuf2_memops v4l2_dv_timings videobuf2_core v4l2_common videodev media xt_CHECKSUM iptable_mangle ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_nat_ipv4 nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack tun bridge stp llc ebtable_filter ebtables ip6table_filter ip6_tables bluetooth rfkill binfmt_misc snd_hda_codec_hdmi i915 snd_hda_intel snd_hda_controller snd_hda_codec intel_rapl x86_pkg_temp_thermal snd_hwdep intel_powerclamp snd_pcm coretemp snd_seq_midi kvm_intel kvm snd_seq_midi_event snd_rawmidi i2c_algo_bit drm_kms_helper snd_seq drm crct10dif_pclmul e1000e snd_seq_device crc32_pclmul snd_timer ghash_clmulni_intel snd mei_me mei ptp pps_core soundcore lpc_ich video crc32c_intel [last unloaded: media]
     CPU: 2 PID: 28332 Comm: v4l2-compliance Not tainted 3.18.102+ #107
     Hardware name:                  /NUC5i7RYB, BIOS RYBDWi35.86A.0364.2017.0511.0949 05/11/2017
     task: ffff8804293f8000 ti: ffff8803f5640000 task.ti: ffff8803f5640000
     RIP: 0010:[<ffffffffc05468d9>]  [<ffffffffc05468d9>] __put_v4l2_format32+0x169/0x220 [videodev]
     RSP: 0018:ffff8803f5643e28  EFLAGS: 00010246
     RAX: 0000000000000000 RBX: 0000000000000000 RCX: 00000000fffb1ab4
     RDX: 00000000fffb1a68 RSI: 00000000fffb18d8 RDI: 00000000fffb1aa8
     RBP: ffff8803f5643e48 R08: 0000000000000001 R09: ffff8803f54b0378
     R10: 0000000000000000 R11: 0000000000000168 R12: 00000000fffb18c0
     R13: 00000000fffb1a94 R14: 00000000fffb18c8 R15: 0000000000000000
     FS:  0000000000000000(0000) GS:ffff880456d00000(0063) knlGS:00000000f7100980
     CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
     CR2: 00000000fffb18e0 CR3: 00000003f552b000 CR4: 00000000003407e0
     Stack:
      00000000fffb1a94 00000000c0cc5640 0000000000000056 ffff8804274f3600
      ffff8803f5643ed0 ffffffffc0547e16 0000000000000003 ffff8803f5643eb0
      ffffffff81301460 ffff88009db44b01 ffff880441942520 ffff8800c0d05640
     Call Trace:
      [<ffffffffc0547e16>] v4l2_compat_ioctl32+0x12d6/0x1b1d [videodev]
      [<ffffffff81301460>] ? file_has_perm+0x70/0xc0
      [<ffffffff81252a2c>] compat_SyS_ioctl+0xec/0x1200
      [<ffffffff8173241a>] sysenter_dispatch+0x7/0x21
     Code: 00 00 48 8b 80 48 c0 ff ff 48 83 e8 38 49 39 c6 0f 87 2b ff ff ff 49 8d 45 1c e8 a3 ce e3 c0 85 c0 0f 85 1a ff ff ff 41 8d 40 ff <4d> 8b 64 24 20 41 89 d5 48 8d 44 40 03 4d 8d 34 c4 eb 15 0f 1f
     RIP  [<ffffffffc05468d9>] __put_v4l2_format32+0x169/0x220 [videodev]
     RSP <ffff8803f5643e28>
     CR2: 00000000fffb18e0
    
    Tested with vivid driver on Kernel v3.18.102.
    
    Same bug happens upstream too:
    
     BUG: KASAN: user-memory-access in __put_v4l2_format32+0x98/0x4d0 [videodev]
     Read of size 8 at addr 00000000ffe48400 by task v4l2-compliance/8713
    
     CPU: 0 PID: 8713 Comm: v4l2-compliance Not tainted 4.16.0-rc4+ #108
     Hardware name:  /NUC5i7RYB, BIOS RYBDWi35.86A.0364.2017.0511.0949 05/11/2017
     Call Trace:
      dump_stack+0x5c/0x7c
      kasan_report+0x164/0x380
      ? __put_v4l2_format32+0x98/0x4d0 [videodev]
      __put_v4l2_format32+0x98/0x4d0 [videodev]
      v4l2_compat_ioctl32+0x1aec/0x27a0 [videodev]
      ? __fsnotify_inode_delete+0x20/0x20
      ? __put_v4l2_format32+0x4d0/0x4d0 [videodev]
      compat_SyS_ioctl+0x646/0x14d0
      ? do_ioctl+0x30/0x30
      do_fast_syscall_32+0x191/0x3f4
      entry_SYSENTER_compat+0x6b/0x7a
     ==================================================================
     Disabling lock debugging due to kernel taint
     BUG: unable to handle kernel paging request at 00000000ffe48400
     IP: __put_v4l2_format32+0x98/0x4d0 [videodev]
     PGD 3a22fb067 P4D 3a22fb067 PUD 39b6f0067 PMD 39b6f1067 PTE 80000003256af067
     Oops: 0001 [#1] SMP KASAN
     Modules linked in: vivid videobuf2_vmalloc videobuf2_dma_contig videobuf2_memops v4l2_tpg v4l2_dv_timings videobuf2_v4l2 videobuf2_common v4l2_common videodev xt_CHECKSUM iptable_mangle ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_nat_ipv4 nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack libcrc32c tun bridge stp llc ebtable_filter ebtables ip6table_filter ip6_tables bluetooth rfkill ecdh_generic binfmt_misc snd_hda_codec_hdmi intel_rapl x86_pkg_temp_thermal intel_powerclamp i915 coretemp snd_hda_intel snd_hda_codec kvm_intel snd_hwdep snd_hda_core kvm snd_pcm irqbypass crct10dif_pclmul crc32_pclmul snd_seq_midi ghash_clmulni_intel snd_seq_midi_event i2c_algo_bit intel_cstate snd_rawmidi intel_uncore snd_seq drm_kms_helper e1000e snd_seq_device snd_timer intel_rapl_perf
      drm ptp snd mei_me mei lpc_ich pps_core soundcore video crc32c_intel
     CPU: 0 PID: 8713 Comm: v4l2-compliance Tainted: G    B            4.16.0-rc4+ #108
     Hardware name:  /NUC5i7RYB, BIOS RYBDWi35.86A.0364.2017.0511.0949 05/11/2017
     RIP: 0010:__put_v4l2_format32+0x98/0x4d0 [videodev]
     RSP: 0018:ffff8803b9be7d30 EFLAGS: 00010282
     RAX: 0000000000000000 RBX: ffff8803ac983e80 RCX: ffffffff8cd929f2
     RDX: 1ffffffff1d0a149 RSI: 0000000000000297 RDI: 0000000000000297
     RBP: 00000000ffe485c0 R08: fffffbfff1cf5123 R09: ffffffff8e7a8948
     R10: 0000000000000001 R11: fffffbfff1cf5122 R12: 00000000ffe483e0
     R13: 00000000ffe485c4 R14: ffff8803ac985918 R15: 00000000ffe483e8
     FS:  0000000000000000(0000) GS:ffff880407400000(0063) knlGS:00000000f7a46980
     CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
     CR2: 00000000ffe48400 CR3: 00000003a83f2003 CR4: 00000000003606f0
     Call Trace:
      v4l2_compat_ioctl32+0x1aec/0x27a0 [videodev]
      ? __fsnotify_inode_delete+0x20/0x20
      ? __put_v4l2_format32+0x4d0/0x4d0 [videodev]
      compat_SyS_ioctl+0x646/0x14d0
      ? do_ioctl+0x30/0x30
      do_fast_syscall_32+0x191/0x3f4
      entry_SYSENTER_compat+0x6b/0x7a
     Code: 4c 89 f7 4d 8d 7c 24 08 e8 e6 a4 69 cb 48 8b 83 98 1a 00 00 48 83 e8 10 49 39 c7 0f 87 9d 01 00 00 49 8d 7c 24 20 e8 c8 a4 69 cb <4d> 8b 74 24 20 4c 89 ef 4c 89 fe ba 10 00 00 00 e8 23 d9 08 cc
     RIP: __put_v4l2_format32+0x98/0x4d0 [videodev] RSP: ffff8803b9be7d30
     CR2: 00000000ffe48400
    
    cc: stable@vger.kernel.org
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Reviewed-by: Hans Verkuil <hans.verkuil@cisco.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit dd39c27b19d62f1ccaa9998381d1f44d69233fff
Author: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Date:   Thu Apr 5 06:51:15 2018 -0300

    media: v4l2-core: fix size of devnode_nums[] bitarray
    
    commit a95845ba184b854106972f5d8f50354c2d272c06 upstream.
    
    The size of devnode_nums[] bit array is too short to store information
    for VFL_TYPE_TOUCH. That causes it to override other memory regions.
    
    Thankfully, on recent reports, it is overriding video_device[] array,
    trigging a WARN_ON(). Yet, it just warns about the problem, but let
    the code excecuting, with generates an OOPS:
    
    [   43.177394] WARNING: CPU: 1 PID: 711 at drivers/media/v4l2-core/v4l2-dev.c:945 __video_register_device+0xc99/0x1090 [videodev]
    [   43.177396] Modules linked in: hid_sensor_custom hid_sensor_als hid_sensor_incl_3d hid_sensor_rotation hid_sensor_magn_3d hid_sensor_accel_3d hid_sensor_gyro_3d hid_sensor_trigger industrialio_triggered_buffer kfifo_buf joydev hid_sensor_iio_common hid_rmi(+) rmi_core industrialio videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common videodev hid_multitouch media hid_sensor_hub binfmt_misc nls_iso8859_1 snd_hda_codec_hdmi arc4 snd_soc_skl snd_soc_skl_ipc snd_hda_ext_core snd_soc_sst_dsp snd_soc_sst_ipc snd_hda_codec_realtek snd_soc_acpi snd_hda_codec_generic snd_soc_core snd_compress ac97_bus snd_pcm_dmaengine snd_hda_intel snd_hda_codec intel_rapl snd_hda_core x86_pkg_temp_thermal snd_hwdep intel_powerclamp coretemp snd_pcm kvm_intel snd_seq_midi snd_seq_midi_event snd_rawmidi crct10dif_pclmul
    [   43.177426]  crc32_pclmul ghash_clmulni_intel iwlmvm pcbc mac80211 snd_seq aesni_intel iwlwifi aes_x86_64 snd_seq_device crypto_simd glue_helper cryptd snd_timer intel_cstate intel_rapl_perf input_leds serio_raw intel_wmi_thunderbolt snd wmi_bmof cfg80211 soundcore ideapad_laptop sparse_keymap idma64 virt_dma tpm_crb acpi_pad int3400_thermal acpi_thermal_rel intel_pch_thermal processor_thermal_device mac_hid int340x_thermal_zone mei_me intel_soc_dts_iosf mei intel_lpss_pci shpchp intel_lpss sch_fq_codel vfio_pci nfsd vfio_virqfd parport_pc ppdev auth_rpcgss nfs_acl lockd grace lp parport sunrpc ip_tables x_tables autofs4 hid_logitech_hidpp hid_logitech_dj hid_generic usbhid kvmgt vfio_mdev mdev vfio_iommu_type1 vfio kvm irqbypass i915 i2c_algo_bit drm_kms_helper syscopyarea sdhci_pci sysfillrect
    [   43.177466]  sysimgblt cqhci fb_sys_fops sdhci drm i2c_hid wmi hid video pinctrl_sunrisepoint pinctrl_intel
    [   43.177474] CPU: 1 PID: 711 Comm: systemd-udevd Not tainted 4.16.0 #1
    [   43.177475] Hardware name: LENOVO 80UE/VIUU4, BIOS 2UCN10T 10/14/2016
    [   43.177481] RIP: 0010:__video_register_device+0xc99/0x1090 [videodev]
    [   43.177482] RSP: 0000:ffffa5c5c231b420 EFLAGS: 00010202
    [   43.177484] RAX: 0000000000000000 RBX: 0000000000000005 RCX: 0000000000000000
    [   43.177485] RDX: ffffffffc0c44cc0 RSI: ffffffffffffffff RDI: ffffffffc0c44cc0
    [   43.177486] RBP: ffffa5c5c231b478 R08: ffffffffc0c96900 R09: ffff8eda1a51f018
    [   43.177487] R10: 0000000000000600 R11: 00000000000003b6 R12: 0000000000000000
    [   43.177488] R13: 0000000000000005 R14: ffffffffc0c96900 R15: ffff8eda1d6d91c0
    [   43.177489] FS:  00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000) knlGS:0000000000000000
    [   43.177490] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   43.177491] CR2: 00007ffe0a6ad01c CR3: 0000000456ae2004 CR4: 00000000003606e0
    [   43.177492] Call Trace:
    [   43.177498]  ? devres_add+0x5f/0x70
    [   43.177502]  rmi_f54_probe+0x437/0x470 [rmi_core]
    [   43.177505]  rmi_function_probe+0x25/0x30 [rmi_core]
    [   43.177507]  driver_probe_device+0x310/0x480
    [   43.177509]  __device_attach_driver+0x86/0x100
    [   43.177511]  ? __driver_attach+0xf0/0xf0
    [   43.177512]  bus_for_each_drv+0x6b/0xb0
    [   43.177514]  __device_attach+0xdd/0x160
    [   43.177516]  device_initial_probe+0x13/0x20
    [   43.177518]  bus_probe_device+0x95/0xa0
    [   43.177519]  device_add+0x44b/0x680
    [   43.177522]  rmi_register_function+0x62/0xd0 [rmi_core]
    [   43.177525]  rmi_create_function+0x112/0x1a0 [rmi_core]
    [   43.177527]  ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
    [   43.177530]  rmi_scan_pdt+0xca/0x1a0 [rmi_core]
    [   43.177535]  rmi_init_functions+0x5b/0x120 [rmi_core]
    [   43.177537]  rmi_driver_probe+0x152/0x3c0 [rmi_core]
    [   43.177547]  ? sysfs_create_link+0x25/0x40
    [   43.177549]  driver_probe_device+0x310/0x480
    [   43.177551]  __device_attach_driver+0x86/0x100
    [   43.177553]  ? __driver_attach+0xf0/0xf0
    [   43.177554]  bus_for_each_drv+0x6b/0xb0
    [   43.177556]  __device_attach+0xdd/0x160
    [   43.177558]  device_initial_probe+0x13/0x20
    [   43.177560]  bus_probe_device+0x95/0xa0
    [   43.177561]  device_add+0x44b/0x680
    [   43.177564]  rmi_register_transport_device+0x84/0x100 [rmi_core]
    [   43.177568]  rmi_input_configured+0xbf/0x1a0 [hid_rmi]
    [   43.177571]  ? input_allocate_device+0xdf/0xf0
    [   43.177574]  hidinput_connect+0x4a9/0x37a0 [hid]
    [   43.177578]  hid_connect+0x326/0x3d0 [hid]
    [   43.177581]  hid_hw_start+0x42/0x70 [hid]
    [   43.177583]  rmi_probe+0x115/0x510 [hid_rmi]
    [   43.177586]  hid_device_probe+0xd3/0x150 [hid]
    [   43.177588]  ? sysfs_create_link+0x25/0x40
    [   43.177590]  driver_probe_device+0x310/0x480
    [   43.177592]  __driver_attach+0xbf/0xf0
    [   43.177593]  ? driver_probe_device+0x480/0x480
    [   43.177595]  bus_for_each_dev+0x74/0xb0
    [   43.177597]  ? kmem_cache_alloc_trace+0x1a6/0x1c0
    [   43.177599]  driver_attach+0x1e/0x20
    [   43.177600]  bus_add_driver+0x167/0x260
    [   43.177602]  ? 0xffffffffc0cbc000
    [   43.177604]  driver_register+0x60/0xe0
    [   43.177605]  ? 0xffffffffc0cbc000
    [   43.177607]  __hid_register_driver+0x63/0x70 [hid]
    [   43.177610]  rmi_driver_init+0x23/0x1000 [hid_rmi]
    [   43.177612]  do_one_initcall+0x52/0x191
    [   43.177615]  ? _cond_resched+0x19/0x40
    [   43.177617]  ? kmem_cache_alloc_trace+0xa2/0x1c0
    [   43.177619]  ? do_init_module+0x27/0x209
    [   43.177621]  do_init_module+0x5f/0x209
    [   43.177623]  load_module+0x1987/0x1f10
    [   43.177626]  ? ima_post_read_file+0x96/0xa0
    [   43.177629]  SYSC_finit_module+0xfc/0x120
    [   43.177630]  ? SYSC_finit_module+0xfc/0x120
    [   43.177632]  SyS_finit_module+0xe/0x10
    [   43.177634]  do_syscall_64+0x73/0x130
    [   43.177637]  entry_SYSCALL_64_after_hwframe+0x3d/0xa2
    [   43.177638] RIP: 0033:0x7fd2d880b839
    [   43.177639] RSP: 002b:00007ffe0a6b2368 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
    [   43.177641] RAX: ffffffffffffffda RBX: 000055cdd86542e0 RCX: 00007fd2d880b839
    [   43.177641] RDX: 0000000000000000 RSI: 00007fd2d84ea0e5 RDI: 0000000000000016
    [   43.177642] RBP: 00007fd2d84ea0e5 R08: 0000000000000000 R09: 00007ffe0a6b2480
    [   43.177643] R10: 0000000000000016 R11: 0000000000000246 R12: 0000000000000000
    [   43.177644] R13: 000055cdd8688930 R14: 0000000000020000 R15: 000055cdd86542e0
    [   43.177645] Code: 48 c7 c7 54 b4 c3 c0 e8 96 9d ec dd e9 d4 fb ff ff 0f 0b 41 be ea ff ff ff e9 c7 fb ff ff 0f 0b 41 be ea ff ff ff e9 ba fb ff ff <0f> 0b e9 d8 f4 ff ff 83 fa 01 0f 84 c4 02 00 00 48 83 78 68 00
    [   43.177675] ---[ end trace d44d9bc41477c2dd ]---
    [   43.177679] BUG: unable to handle kernel NULL pointer dereference at 0000000000000499
    [   43.177723] IP: __video_register_device+0x1cc/0x1090 [videodev]
    [   43.177749] PGD 0 P4D 0
    [   43.177764] Oops: 0000 [#1] SMP PTI
    [   43.177780] Modules linked in: hid_sensor_custom hid_sensor_als hid_sensor_incl_3d hid_sensor_rotation hid_sensor_magn_3d hid_sensor_accel_3d hid_sensor_gyro_3d hid_sensor_trigger industrialio_triggered_buffer kfifo_buf joydev hid_sensor_iio_common hid_rmi(+) rmi_core industrialio videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common videodev hid_multitouch media hid_sensor_hub binfmt_misc nls_iso8859_1 snd_hda_codec_hdmi arc4 snd_soc_skl snd_soc_skl_ipc snd_hda_ext_core snd_soc_sst_dsp snd_soc_sst_ipc snd_hda_codec_realtek snd_soc_acpi snd_hda_codec_generic snd_soc_core snd_compress ac97_bus snd_pcm_dmaengine snd_hda_intel snd_hda_codec intel_rapl snd_hda_core x86_pkg_temp_thermal snd_hwdep intel_powerclamp coretemp snd_pcm kvm_intel snd_seq_midi snd_seq_midi_event snd_rawmidi crct10dif_pclmul
    [   43.178055]  crc32_pclmul ghash_clmulni_intel iwlmvm pcbc mac80211 snd_seq aesni_intel iwlwifi aes_x86_64 snd_seq_device crypto_simd glue_helper cryptd snd_timer intel_cstate intel_rapl_perf input_leds serio_raw intel_wmi_thunderbolt snd wmi_bmof cfg80211 soundcore ideapad_laptop sparse_keymap idma64 virt_dma tpm_crb acpi_pad int3400_thermal acpi_thermal_rel intel_pch_thermal processor_thermal_device mac_hid int340x_thermal_zone mei_me intel_soc_dts_iosf mei intel_lpss_pci shpchp intel_lpss sch_fq_codel vfio_pci nfsd vfio_virqfd parport_pc ppdev auth_rpcgss nfs_acl lockd grace lp parport sunrpc ip_tables x_tables autofs4 hid_logitech_hidpp hid_logitech_dj hid_generic usbhid kvmgt vfio_mdev mdev vfio_iommu_type1 vfio kvm irqbypass i915 i2c_algo_bit drm_kms_helper syscopyarea sdhci_pci sysfillrect
    [   43.178337]  sysimgblt cqhci fb_sys_fops sdhci drm i2c_hid wmi hid video pinctrl_sunrisepoint pinctrl_intel
    [   43.178380] CPU: 1 PID: 711 Comm: systemd-udevd Tainted: G        W        4.16.0 #1
    [   43.178411] Hardware name: LENOVO 80UE/VIUU4, BIOS 2UCN10T 10/14/2016
    [   43.178441] RIP: 0010:__video_register_device+0x1cc/0x1090 [videodev]
    [   43.178467] RSP: 0000:ffffa5c5c231b420 EFLAGS: 00010202
    [   43.178490] RAX: ffffffffc0c44cc0 RBX: 0000000000000005 RCX: ffffffffc0c454c0
    [   43.178519] RDX: 0000000000000001 RSI: ffff8eda1d6d9118 RDI: ffffffffc0c44cc0
    [   43.178549] RBP: ffffa5c5c231b478 R08: ffffffffc0c96900 R09: ffff8eda1a51f018
    [   43.178579] R10: 0000000000000600 R11: 00000000000003b6 R12: 0000000000000000
    [   43.178608] R13: 0000000000000005 R14: ffffffffc0c96900 R15: ffff8eda1d6d91c0
    [   43.178636] FS:  00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000) knlGS:0000000000000000
    [   43.178669] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   43.178693] CR2: 0000000000000499 CR3: 0000000456ae2004 CR4: 00000000003606e0
    [   43.178721] Call Trace:
    [   43.178736]  ? devres_add+0x5f/0x70
    [   43.178755]  rmi_f54_probe+0x437/0x470 [rmi_core]
    [   43.178779]  rmi_function_probe+0x25/0x30 [rmi_core]
    [   43.178805]  driver_probe_device+0x310/0x480
    [   43.178828]  __device_attach_driver+0x86/0x100
    [   43.178851]  ? __driver_attach+0xf0/0xf0
    [   43.178884]  bus_for_each_drv+0x6b/0xb0
    [   43.178904]  __device_attach+0xdd/0x160
    [   43.178925]  device_initial_probe+0x13/0x20
    [   43.178948]  bus_probe_device+0x95/0xa0
    [   43.178968]  device_add+0x44b/0x680
    [   43.178987]  rmi_register_function+0x62/0xd0 [rmi_core]
    [   43.181747]  rmi_create_function+0x112/0x1a0 [rmi_core]
    [   43.184677]  ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
    [   43.187505]  rmi_scan_pdt+0xca/0x1a0 [rmi_core]
    [   43.190171]  rmi_init_functions+0x5b/0x120 [rmi_core]
    [   43.192809]  rmi_driver_probe+0x152/0x3c0 [rmi_core]
    [   43.195403]  ? sysfs_create_link+0x25/0x40
    [   43.198253]  driver_probe_device+0x310/0x480
    [   43.201083]  __device_attach_driver+0x86/0x100
    [   43.203800]  ? __driver_attach+0xf0/0xf0
    [   43.206503]  bus_for_each_drv+0x6b/0xb0
    [   43.209291]  __device_attach+0xdd/0x160
    [   43.212207]  device_initial_probe+0x13/0x20
    [   43.215146]  bus_probe_device+0x95/0xa0
    [   43.217885]  device_add+0x44b/0x680
    [   43.220597]  rmi_register_transport_device+0x84/0x100 [rmi_core]
    [   43.223321]  rmi_input_configured+0xbf/0x1a0 [hid_rmi]
    [   43.226051]  ? input_allocate_device+0xdf/0xf0
    [   43.228814]  hidinput_connect+0x4a9/0x37a0 [hid]
    [   43.231701]  hid_connect+0x326/0x3d0 [hid]
    [   43.234548]  hid_hw_start+0x42/0x70 [hid]
    [   43.237302]  rmi_probe+0x115/0x510 [hid_rmi]
    [   43.239862]  hid_device_probe+0xd3/0x150 [hid]
    [   43.242558]  ? sysfs_create_link+0x25/0x40
    [   43.242828] audit: type=1400 audit(1522795151.600:4): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/snap/core/4206/usr/lib/snapd/snap-confine" pid=1151 comm="apparmor_parser"
    [   43.244859]  driver_probe_device+0x310/0x480
    [   43.244862]  __driver_attach+0xbf/0xf0
    [   43.246982] audit: type=1400 audit(1522795151.600:5): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/snap/core/4206/usr/lib/snapd/snap-confine//mount-namespace-capture-helper" pid=1151 comm="apparmor_parser"
    [   43.249403]  ? driver_probe_device+0x480/0x480
    [   43.249405]  bus_for_each_dev+0x74/0xb0
    [   43.253200] audit: type=1400 audit(1522795151.600:6): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/snap/core/4206/usr/lib/snapd/snap-confine//snap_update_ns" pid=1151 comm="apparmor_parser"
    [   43.254055]  ? kmem_cache_alloc_trace+0x1a6/0x1c0
    [   43.256282] audit: type=1400 audit(1522795151.604:7): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/sbin/dhclient" pid=1152 comm="apparmor_parser"
    [   43.258436]  driver_attach+0x1e/0x20
    [   43.260875] audit: type=1400 audit(1522795151.604:8): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1152 comm="apparmor_parser"
    [   43.263118]  bus_add_driver+0x167/0x260
    [   43.267676] audit: type=1400 audit(1522795151.604:9): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/NetworkManager/nm-dhcp-helper" pid=1152 comm="apparmor_parser"
    [   43.268807]  ? 0xffffffffc0cbc000
    [   43.268812]  driver_register+0x60/0xe0
    [   43.271184] audit: type=1400 audit(1522795151.604:10): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/connman/scripts/dhclient-script" pid=1152 comm="apparmor_parser"
    [   43.274081]  ? 0xffffffffc0cbc000
    [   43.274086]  __hid_register_driver+0x63/0x70 [hid]
    [   43.288367]  rmi_driver_init+0x23/0x1000 [hid_rmi]
    [   43.291501]  do_one_initcall+0x52/0x191
    [   43.292348] audit: type=1400 audit(1522795151.652:11): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/man" pid=1242 comm="apparmor_parser"
    [   43.294212]  ? _cond_resched+0x19/0x40
    [   43.300028]  ? kmem_cache_alloc_trace+0xa2/0x1c0
    [   43.303475]  ? do_init_module+0x27/0x209
    [   43.306842]  do_init_module+0x5f/0x209
    [   43.310269]  load_module+0x1987/0x1f10
    [   43.313704]  ? ima_post_read_file+0x96/0xa0
    [   43.317174]  SYSC_finit_module+0xfc/0x120
    [   43.320754]  ? SYSC_finit_module+0xfc/0x120
    [   43.324065]  SyS_finit_module+0xe/0x10
    [   43.327387]  do_syscall_64+0x73/0x130
    [   43.330909]  entry_SYSCALL_64_after_hwframe+0x3d/0xa2
    [   43.334305] RIP: 0033:0x7fd2d880b839
    [   43.337810] RSP: 002b:00007ffe0a6b2368 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
    [   43.341259] RAX: ffffffffffffffda RBX: 000055cdd86542e0 RCX: 00007fd2d880b839
    [   43.344613] RDX: 0000000000000000 RSI: 00007fd2d84ea0e5 RDI: 0000000000000016
    [   43.347962] RBP: 00007fd2d84ea0e5 R08: 0000000000000000 R09: 00007ffe0a6b2480
    [   43.351456] R10: 0000000000000016 R11: 0000000000000246 R12: 0000000000000000
    [   43.354845] R13: 000055cdd8688930 R14: 0000000000020000 R15: 000055cdd86542e0
    [   43.358224] Code: c7 05 ad 12 02 00 00 00 00 00 48 8d 88 00 08 00 00 eb 09 48 83 c0 08 48 39 c1 74 31 48 8b 10 48 85 d2 74 ef 49 8b b7 98 04 00 00 <48> 39 b2 98 04 00 00 75 df 48 63 92 f8 04 00 00 f0 48 0f ab 15
    [   43.361764] RIP: __video_register_device+0x1cc/0x1090 [videodev] RSP: ffffa5c5c231b420
    [   43.365281] CR2: 0000000000000499
    
    This patch fixes the array size and changes the WARN_ON() to return an error,
    instead of letting the Kernel to proceed with registering.
    
    Cc: stable@vger.kernel.org # For Kernel 4.16
    Fixes: 4839c58f034a ("media: v4l2-dev: convert VFL_TYPE_* into an enum")
    Reported-by: Peter Geis <pgwipeout@gmail.com>
    Reported-by: Jaak Ristioja <jaak@ristioja.ee>
    Reported-by: Michał Siemek <mihau69@gmail.com>
    Reviewed-by: Hans Verkuil <hans.verkuil@cisco.com>
    Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 032439485e56883654bcb9334eee99cdf3f5dee1
Author: Rob Gardner <rob.gardner@oracle.com>
Date:   Sat Mar 31 22:53:01 2018 -0600

    sparc64: Properly range check DAX completion index
    
    
    [ Upstream commit 49d7006d9f01d435661d03bbea3db4c33935b3d8 ]
    
    Each Oracle DAX CCB has a corresponding completion area, and the required
    number of areas must fit within a previously allocated array of completion
    areas beginning at the requested index.  Since the completion area index
    is specified by a file offset, a user can pass arbitrary values, including
    negative numbers. So the index must be thoroughly range checked to prevent
    access to addresses outside the bounds of the allocated completion
    area array.  The index cannot be negative, and it cannot exceed the
    total array size, less the number of CCBs requested. The old code did
    not check for negative values and was off by one on the upper bound.
    
    Signed-off-by: Rob Gardner <rob.gardner@oracle.com>
    Signed-off-by: Jonathan Helman <jonathan.helman@oracle.com>
    Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2163146fd1c870c1082aa45f5f53ead0d6e51f7c
Author: Phil Elwell <phil@raspberrypi.org>
Date:   Wed Apr 11 10:59:17 2018 +0100

    lan78xx: Correctly indicate invalid OTP
    
    
    [ Upstream commit 4bfc33807a9a02764bdd1e42e794b3b401240f27 ]
    
    lan78xx_read_otp tries to return -EINVAL in the event of invalid OTP
    content, but the value gets overwritten before it is returned and the
    read goes ahead anyway. Make the read conditional as it should be
    and preserve the error code.
    
    Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet device driver")
    Signed-off-by: Phil Elwell <phil@raspberrypi.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 73f1e78eb1dc1b64e9ee7bf82c7568a0673ea94f
Author: Eric Auger <eric.auger@redhat.com>
Date:   Wed Apr 11 15:30:38 2018 +0200

    vhost: Fix vhost_copy_to_user()
    
    
    [ Upstream commit 7ced6c98c7ab7a1f6743931e28671b833af79b1e ]
    
    vhost_copy_to_user is used to copy vring used elements to userspace.
    We should use VHOST_ADDR_USED instead of VHOST_ADDR_DESC.
    
    Fixes: f88949138058 ("vhost: introduce O(1) vq metadata cache")
    Signed-off-by: Eric Auger <eric.auger@redhat.com>
    Acked-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 0c2d18968e36406ee53925e8214ad91b8e7567bf
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Tue Apr 10 12:57:18 2018 +0200

    ip_gre: clear feature flags when incompatible o_flags are set
    
    
    [ Upstream commit 1cc5954f44150bb70cac07c3cc5df7cf0dfb61ec ]
    
    Commit dd9d598c6657 ("ip_gre: add the support for i/o_flags update via
    netlink") added the ability to change o_flags, but missed that the
    GSO/LLTX features are disabled by default, and only enabled some gre
    features are unused. Thus we also need to disable the GSO/LLTX features
    on the device when the TUNNEL_SEQ or TUNNEL_CSUM flags are set.
    
    These two examples should result in the same features being set:
    
        ip link add gre_none type gre local 192.168.0.10 remote 192.168.0.20 ttl 255 key 0
    
        ip link set gre_none type gre seq
        ip link add gre_seq type gre local 192.168.0.10 remote 192.168.0.20 ttl 255 key 1 seq
    
    Fixes: dd9d598c6657 ("ip_gre: add the support for i/o_flags update via netlink")
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: William Tu <u9012063@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 20ea4ed3361845f80865e9321926482be0794b0e
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Tue Apr 10 21:01:13 2018 +0200

    l2tp: fix race in duplicate tunnel detection
    
    
    [ Upstream commit f6cd651b056ffd3b4e8496afd44d4ed44bf69136 ]
    
    We can't use l2tp_tunnel_find() to prevent l2tp_nl_cmd_tunnel_create()
    from creating a duplicate tunnel. A tunnel can be concurrently
    registered after l2tp_tunnel_find() returns. Therefore, searching for
    duplicates must be done at registration time.
    
    Finally, remove l2tp_tunnel_find() entirely as it isn't use anywhere
    anymore.
    
    Fixes: 309795f4bec2 ("l2tp: Add netlink control API for L2TP")
    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 4f9aa3f83f7ac517daac34b2e2415cd5f5a0f62a
Author: Guillaume Nault <g.nault@alphalink.fr>
Date:   Tue Apr 10 21:01:12 2018 +0200

    l2tp: fix races in tunnel creation
    
    
    [ Upstream commit 6b9f34239b00e6956a267abed2bc559ede556ad6 ]
    
    l2tp_tunnel_create() inserts the new tunnel into the namespace's tunnel
    list and sets the socket's ->sk_user_data field, before returning it to
    the caller. Therefore, there are two ways the tunnel can be accessed
    and freed, before the caller even had the opportunity to take a
    reference. In practice, syzbot could crash the module by closing the
    socket right after a new tunnel was returned to pppol2tp_create().
    
    This patch moves tunnel registration out of l2tp_tunnel_create(), so
    that the caller can safely hold a reference before publishing the
    tunnel. This second step is done with the new l2tp_tunnel_register()
    function, which is now responsible for associating the tunnel to its
    socket and for inserting it into the namespace's list.
    
    While moving the code to l2tp_tunnel_register(), a few modifications
    have been done. First, the socket validation tests are done in a helper
    function, for clarity. Also, modifying the socket is now done after
    having inserted the tunnel to the namespace's tunnels list. This will
    allow insertion to fail, without having to revert theses modifications
    in the error path (a followup patch will check for duplicate tunnels
    before insertion). Either the socket is a kernel socket which we
    control, or it is a user-space socket for which we have a reference on
    the file descriptor. In any case, the socket isn't going to be closed
    from under us.
    
    Reported-by: syzbot+fbeeb5c3b538e8545644@syzkaller.appspotmail.com
    Fixes: fd558d186df2 ("l2tp: Split pppol2tp patch into separate l2tp and ppp parts")
    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 fa3e70455d5c780ad3e1104c4747fac58b71a6c0
Author: Stefan Hajnoczi <stefanha@redhat.com>
Date:   Wed Apr 11 10:35:40 2018 +0800

    vhost: fix vhost_vq_access_ok() log check
    
    
    [ Upstream commit d14d2b78090c7de0557362b26a4ca591aa6a9faa ]
    
    Commit d65026c6c62e7d9616c8ceb5a53b68bcdc050525 ("vhost: validate log
    when IOTLB is enabled") introduced a regression.  The logic was
    originally:
    
      if (vq->iotlb)
          return 1;
      return A && B;
    
    After the patch the short-circuit logic for A was inverted:
    
      if (A || vq->iotlb)
          return A;
      return B;
    
    This patch fixes the regression by rewriting the checks in the obvious
    way, no longer returning A when vq->iotlb is non-NULL (which is hard to
    understand).
    
    Reported-by: syzbot+65a84dde0214b0387ccd@syzkaller.appspotmail.com
    Cc: Jason Wang <jasowang@redhat.com>
    Signed-off-by: Stefan Hajnoczi <stefanha@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 ca27a48e169554601d3b072ece3413dac02d8a14
Author: Tejaswi Tanikella <tejaswit@codeaurora.org>
Date:   Wed Apr 11 16:34:47 2018 +0530

    slip: Check if rstate is initialized before uncompressing
    
    
    [ Upstream commit 3f01ddb962dc506916c243f9524e8bef97119b77 ]
    
    On receiving a packet the state index points to the rstate which must be
    used to fill up IP and TCP headers. But if the state index points to a
    rstate which is unitialized, i.e. filled with zeros, it gets stuck in an
    infinite loop inside ip_fast_csum trying to compute the ip checsum of a
    header with zero length.
    
    89.666953:   <2> [<ffffff9dd3e94d38>] slhc_uncompress+0x464/0x468
    89.666965:   <2> [<ffffff9dd3e87d88>] ppp_receive_nonmp_frame+0x3b4/0x65c
    89.666978:   <2> [<ffffff9dd3e89dd4>] ppp_receive_frame+0x64/0x7e0
    89.666991:   <2> [<ffffff9dd3e8a708>] ppp_input+0x104/0x198
    89.667005:   <2> [<ffffff9dd3e93868>] pppopns_recv_core+0x238/0x370
    89.667027:   <2> [<ffffff9dd4428fc8>] __sk_receive_skb+0xdc/0x250
    89.667040:   <2> [<ffffff9dd3e939e4>] pppopns_recv+0x44/0x60
    89.667053:   <2> [<ffffff9dd4426848>] __sock_queue_rcv_skb+0x16c/0x24c
    89.667065:   <2> [<ffffff9dd4426954>] sock_queue_rcv_skb+0x2c/0x38
    89.667085:   <2> [<ffffff9dd44f7358>] raw_rcv+0x124/0x154
    89.667098:   <2> [<ffffff9dd44f7568>] raw_local_deliver+0x1e0/0x22c
    89.667117:   <2> [<ffffff9dd44c8ba0>] ip_local_deliver_finish+0x70/0x24c
    89.667131:   <2> [<ffffff9dd44c92f4>] ip_local_deliver+0x100/0x10c
    
    ./scripts/faddr2line vmlinux slhc_uncompress+0x464/0x468 output:
     ip_fast_csum at arch/arm64/include/asm/checksum.h:40
     (inlined by) slhc_uncompress at drivers/net/slip/slhc.c:615
    
    Adding a variable to indicate if the current rstate is initialized. If
    such a packet arrives, move to toss state.
    
    Signed-off-by: Tejaswi Tanikella <tejaswit@codeaurora.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f46efb79f5d3e6aa4e50942c1fc3c1e05ac6198d
Author: Ka-Cheong Poon <ka-cheong.poon@oracle.com>
Date:   Wed Apr 11 00:57:25 2018 -0700

    rds: MP-RDS may use an invalid c_path
    
    
    [ Upstream commit a43cced9a348901f9015f4730b70b69e7c41a9c9 ]
    
    rds_sendmsg() calls rds_send_mprds_hash() to find a c_path to use to
    send a message.  Suppose the RDS connection is not yet up.  In
    rds_send_mprds_hash(), it does
    
            if (conn->c_npaths == 0)
                    wait_event_interruptible(conn->c_hs_waitq,
                                             (conn->c_npaths != 0));
    
    If it is interrupted before the connection is set up,
    rds_send_mprds_hash() will return a non-zero hash value.  Hence
    rds_sendmsg() will use a non-zero c_path to send the message.  But if
    the RDS connection ends up to be non-MP capable, the message will be
    lost as only the zero c_path can be used.
    
    Signed-off-by: Ka-Cheong Poon <ka-cheong.poon@oracle.com>
    Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 30d8e38bc876c48114de1b4090acd41c321f1c89
Author: Bassem Boubaker <bassem.boubaker@actia.fr>
Date:   Wed Apr 11 13:15:53 2018 +0200

    cdc_ether: flag the Cinterion AHS8 modem by gemalto as WWAN
    
    
    [ Upstream commit 53765341ee821c0a0f1dec41adc89c9096ad694c ]
    
    The Cinterion AHS8 is a 3G device with one embedded WWAN interface
    using cdc_ether as a driver.
    
    The modem is controlled via AT commands through the exposed TTYs.
    
    AT+CGDCONT write command can be used to activate or deactivate a WWAN
    connection for a PDP context defined with the same command. UE
    supports one WWAN adapter.
    
    Signed-off-by: Bassem Boubaker <bassem.boubaker@actia.fr>
    Acked-by: Oliver Neukum <oneukum@suse.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>