commit eedaf21fb32353c81ea5eb7c910a1acd958523d1
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Apr 20 08:21:08 2018 +0200

    Linux 4.9.95

commit c3ba64bb3a6c8a4bc9fd3fd4e3a882e66f1942fa
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Apr 19 16:00:32 2018 +0200

    Revert "net: phy: micrel: Restore led_mode and clk_sel on resume"
    
    This reverts commit d7ba3c00047dfd88fe0360a2d27169b54c88c4f1 which was
    commit 79e498a9c7da0737829ff864aae44df434105676 upstream.
    
    Turns out it breaks things, so drop it.
    
    Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org>
    Cc: Leonard Crestez <leonard.crestez@nxp.com>
    Cc: Florian Fainelli <f.fainelli@gmail.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Sasha Levin <alexander.levin@microsoft.com>
    Cc: Dan Rue <dan.rue@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1cd969fdb447655e6f4b1e0a3213e27c7ad236c2
Author: Will Deacon <will.deacon@arm.com>
Date:   Mon Feb 5 15:34:24 2018 +0000

    arm64: futex: Mask __user pointers prior to dereference
    
    commit 91b2d3442f6a44dce875670d702af22737ad5eff upstream.
    
    The arm64 futex code has some explicit dereferencing of user pointers
    where performing atomic operations in response to a futex command. This
    patch uses masking to limit any speculative futex operations to within
    the user address space.
    
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 82236561095d64471a3a38d3a8f1fd7d815df3dd
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 72de9891b5f46f1f98e7e6243c47076a4b4daa3c
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 0eecffb5e95390e72c5ac0c6d184881c14ad1b3a
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 fc89a75c246bbf7fc26b25ae29ee488abb6400c4
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 6b61154b0680ebd3d82fd9415e9cd2c977bebcf2
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>

commit ebdb0d5abc412a5461db8a1a562551d6b643d578
Author: Marek Szyprowski <m.szyprowski@samsung.com>
Date:   Mon Jan 15 14:58:21 2018 +0100

    hwmon: (ina2xx) Fix access to uninitialized mutex
    
    commit 0c4c5860e9983eb3da7a3d73ca987643c3ed034b upstream.
    
    Initialize data->config_lock mutex before it is used by the driver code.
    
    This fixes following warning on Odroid XU3 boards:
    
    INFO: trying to register non-static key.
    the code is fine but needs lockdep annotation.
    turning off the locking correctness validator.
    CPU: 5 PID: 1 Comm: swapper/0 Not tainted 4.15.0-rc7-next-20180115-00001-gb75575dee3f2 #107
    Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
    [<c0111504>] (unwind_backtrace) from [<c010dbec>] (show_stack+0x10/0x14)
    [<c010dbec>] (show_stack) from [<c09b3f74>] (dump_stack+0x90/0xc8)
    [<c09b3f74>] (dump_stack) from [<c0179528>] (register_lock_class+0x1c0/0x59c)
    [<c0179528>] (register_lock_class) from [<c017bd1c>] (__lock_acquire+0x78/0x1850)
    [<c017bd1c>] (__lock_acquire) from [<c017de30>] (lock_acquire+0xc8/0x2b8)
    [<c017de30>] (lock_acquire) from [<c09ca59c>] (__mutex_lock+0x60/0xa0c)
    [<c09ca59c>] (__mutex_lock) from [<c09cafd0>] (mutex_lock_nested+0x1c/0x24)
    [<c09cafd0>] (mutex_lock_nested) from [<c068b0d0>] (ina2xx_set_shunt+0x70/0xb0)
    [<c068b0d0>] (ina2xx_set_shunt) from [<c068b218>] (ina2xx_probe+0x88/0x1b0)
    [<c068b218>] (ina2xx_probe) from [<c0673d90>] (i2c_device_probe+0x1e0/0x2d0)
    [<c0673d90>] (i2c_device_probe) from [<c053a268>] (driver_probe_device+0x2b8/0x4a0)
    [<c053a268>] (driver_probe_device) from [<c053a54c>] (__driver_attach+0xfc/0x120)
    [<c053a54c>] (__driver_attach) from [<c05384cc>] (bus_for_each_dev+0x58/0x7c)
    [<c05384cc>] (bus_for_each_dev) from [<c0539590>] (bus_add_driver+0x174/0x250)
    [<c0539590>] (bus_add_driver) from [<c053b5e0>] (driver_register+0x78/0xf4)
    [<c053b5e0>] (driver_register) from [<c0675ef0>] (i2c_register_driver+0x38/0xa8)
    [<c0675ef0>] (i2c_register_driver) from [<c0102b40>] (do_one_initcall+0x48/0x18c)
    [<c0102b40>] (do_one_initcall) from [<c0e00df0>] (kernel_init_freeable+0x110/0x1d4)
    [<c0e00df0>] (kernel_init_freeable) from [<c09c8120>] (kernel_init+0x8/0x114)
    [<c09c8120>] (kernel_init) from [<c01010b4>] (ret_from_fork+0x14/0x20)
    
    Fixes: 5d389b125186 ("hwmon: (ina2xx) Make calibration register value fixed")
    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    [backport to v4.4.y/v4.9.y: context changes]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bcd7de03d68a6953d00453bc1380ee34d2f4e000
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 b0a2a2b20b38fb0de45aa8c84b7e9109269a1176
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 960534a57db826558ba5eece275c81d8122eb6db
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 d6bcc2153ba7649a8c742889489dbd5b4f3208cc
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 5a768873810afbd22b1c22a9f2d962b3fde10312
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 deda8e039680411eb881fcea17f5a358bc4c4589
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 768fce44221a2db5a68fdd1bd12dd2aed107cfe0
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 c3530143fe2442b2b84abe4d720efb2cf6ec4338
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 6ba906fca335e6f9e66a2ed00ced31686c6e0882
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Tue Apr 17 14:56:21 2018 +0200

    Revert "perf tests: Decompress kernel module before objdump"
    
    This reverts commit 7525a238be8f46617cdda29d1be5b85ffe3b042d which is
    commit 94df1040b1e6aacd8dec0ba3c61d7e77cd695f26 upstream.
    
    It breaks the build of perf on 4.9.y, so I'm dropping it.
    
    Reported-by: Pavlos Parissis <pavlos.parissis@gmail.com>
    Reported-by: Lei Chen <chenl.lei@gmail.com>
    Reported-by: Maxime Hadjinlian <maxime.hadjinlian@gmail.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Wang Nan <wangnan0@huawei.com>
    Cc: kernel-team@lge.com
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 994baf8abdac7555e7008643053c13d69fb5e3e5
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 288b1dde54cbc930b8a61d1b7395141db86cc67a
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:38 2018 +0100

    arm64: Kill PSCI_GET_VERSION as a variant-2 workaround
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit 3a0a397ff5ff8b56ca9f7908b75dee6bf0b5fabb upstream.
    
    Now that we've standardised on SMCCC v1.1 to perform the branch
    prediction invalidation, let's drop the previous band-aid.
    If vendors haven't updated their firmware to do SMCCC 1.1, they
    haven't updated PSCI either, so we don't loose anything.
    
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c24c205d2528e09379c2129cc33773221269feb0
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:37 2018 +0100

    arm64: Add ARM_SMCCC_ARCH_WORKAROUND_1 BP hardening support
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit b092201e0020614127f495c092e0a12d26a2116e upstream.
    
    Add the detection and runtime code for ARM_SMCCC_ARCH_WORKAROUND_1.
    It is lovely. Really.
    
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit eb90973e64c7174a4d2b584f1675e80fb8336100
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:36 2018 +0100

    arm/arm64: smccc: Implement SMCCC v1.1 inline primitive
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit f2d3b2e8759a5833df6f022e42df2d581e6d843c upstream.
    
    One of the major improvement of SMCCC v1.1 is that it only clobbers
    the first 4 registers, both on 32 and 64bit. This means that it
    becomes very easy to provide an inline version of the SMC call
    primitive, and avoid performing a function call to stash the
    registers that would otherwise be clobbered by SMCCC v1.0.
    
    Reviewed-by: Robin Murphy <robin.murphy@arm.com>
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5d667c15ee231d357d6f1ee3d8afb91ff9e3c877
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:35 2018 +0100

    arm/arm64: smccc: Make function identifiers an unsigned quantity
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit ded4c39e93f3b72968fdb79baba27f3b83dad34c upstream.
    
    Function identifiers are a 32bit, unsigned quantity. But we never
    tell so to the compiler, resulting in the following:
    
     4ac:   b26187e0        mov     x0, #0xffffffff80000001
    
    We thus rely on the firmware narrowing it for us, which is not
    always a reasonable expectation.
    
    Cc: stable@vger.kernel.org
    Reported-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Reviewed-by: Robin Murphy <robin.murphy@arm.com>
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 883a91d37ff3809d3c5a144ec0a59f4f68509acc
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:34 2018 +0100

    firmware/psci: Expose SMCCC version through psci_ops
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit e78eef554a912ef6c1e0bbf97619dafbeae3339f upstream.
    
    Since PSCI 1.0 allows the SMCCC version to be (indirectly) probed,
    let's do that at boot time, and expose the version of the calling
    convention as part of the psci_ops structure.
    
    Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Reviewed-by: Robin Murphy <robin.murphy@arm.com>
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 56d37971abfc59d6c6eaafab9bd4d62445c1d66f
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:33 2018 +0100

    firmware/psci: Expose PSCI conduit
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit 09a8d6d48499f93e2abde691f5800081cd858726 upstream.
    
    In order to call into the firmware to apply workarounds, it is
    useful to find out whether we're using HVC or SMC. Let's expose
    this through the psci_ops.
    
    Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Reviewed-by: Robin Murphy <robin.murphy@arm.com>
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 196d04197d08a9871c1e12782823caee90cc1c20
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:32 2018 +0100

    arm64: KVM: Add SMCCC_ARCH_WORKAROUND_1 fast handling
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit f72af90c3783d924337624659b43e2d36f1b36b4 upstream.
    
    We want SMCCC_ARCH_WORKAROUND_1 to be fast. As fast as possible.
    So let's intercept it as early as we can by testing for the
    function call number as soon as we've identified a HVC call
    coming from the guest.
    
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c9ae3d5717bf14c05299f184c4bfee79e9a22efe
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:31 2018 +0100

    arm64: KVM: Report SMCCC_ARCH_WORKAROUND_1 BP hardening support
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit 6167ec5c9145cdf493722dfd80a5d48bafc4a18a upstream.
    
    A new feature of SMCCC 1.1 is that it offers firmware-based CPU
    workarounds. In particular, SMCCC_ARCH_WORKAROUND_1 provides
    BP hardening for CVE-2017-5715.
    
    If the host has some mitigation for this issue, report that
    we deal with it using SMCCC_ARCH_WORKAROUND_1, as we apply the
    host workaround on every guest exit.
    
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: account for files moved to virt/ upstream]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 142cfd60faba9cfa34adc1a3cf7e184a8066c12f
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:30 2018 +0100

    arm/arm64: KVM: Turn kvm_psci_version into a static inline
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit a4097b351118e821841941a79ec77d3ce3f1c5d9 upstream.
    
    We're about to need kvm_psci_version in HYP too. So let's turn it
    into a static inline, and pass the kvm structure as a second
    parameter (so that HYP can do a kern_hyp_va on it).
    
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: account for files moved to virt/ upstream]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c482a245b9692d86d038262795caa998d852983f
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:29 2018 +0100

    arm64: KVM: Make PSCI_VERSION a fast path
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit 90348689d500410ca7a55624c667f956771dce7f upstream.
    
    For those CPUs that require PSCI to perform a BP invalidation,
    going all the way to the PSCI code for not much is a waste of
    precious cycles. Let's terminate that call as early as possible.
    
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6681f3c44016f6997daf55e0389393b6fee89843
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:28 2018 +0100

    arm/arm64: KVM: Advertise SMCCC v1.1
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit 09e6be12effdb33bf7210c8867bbd213b66a499e upstream.
    
    The new SMC Calling Convention (v1.1) allows for a reduced overhead
    when calling into the firmware, and provides a new feature discovery
    mechanism.
    
    Make it visible to KVM guests.
    
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: account for files moved to virt/ upstream]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4b1713f50d68de8f5cb4c98b6956d29d653e2c1b
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:27 2018 +0100

    arm/arm64: KVM: Implement PSCI 1.0 support
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit 58e0b2239a4d997094ba63986ef4de29ddc91d87 upstream.
    
    PSCI 1.0 can be trivially implemented by providing the FEATURES
    call on top of PSCI 0.2 and returning 1.0 as the PSCI version.
    
    We happily ignore everything else, as they are either optional or
    are clarifications that do not require any additional change.
    
    PSCI 1.0 is now the default until we decide to add a userspace
    selection API.
    
    Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: account for files moved to virt/ upstream]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 54faafb2b7b1900eeb08fc9db55c0a9e122dd20d
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:26 2018 +0100

    arm/arm64: KVM: Add smccc accessors to PSCI code
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit 84684fecd7ea381824a96634a027b7719587fb77 upstream.
    
    Instead of open coding the accesses to the various registers,
    let's add explicit SMCCC accessors.
    
    Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: account for files moved to virt/ upstream]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 33e6484755bc6fbd16f455a4e23e68335db3cb21
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:25 2018 +0100

    arm/arm64: KVM: Add PSCI_VERSION helper
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit d0a144f12a7ca8368933eae6583c096c363ec506 upstream.
    
    As we're about to trigger a PSCI version explosion, it doesn't
    hurt to introduce a PSCI_VERSION helper that is going to be
    used everywhere.
    
    Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: account for files moved to virt/ upstream]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8b106affdfb63b6fd71c49b230c942fa525d8a0c
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:24 2018 +0100

    arm/arm64: KVM: Consolidate the PSCI include files
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit 1a2fb94e6a771ff94f4afa22497a4695187b820c upstream.
    
    As we're about to update the PSCI support, and because I'm lazy,
    let's move the PSCI include file to include/kvm so that both
    ARM architectures can find it.
    
    Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: account for files moved to virt/ upstream]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e06ea9af0fb58e46771569fded5b3bd75fdd2dc9
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:23 2018 +0100

    arm64: KVM: Increment PC after handling an SMC trap
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit f5115e8869e1dfafac0e414b4f1664f3a84a4683 upstream.
    
    When handling an SMC trap, the "preferred return address" is set
    to that of the SMC, and not the next PC (which is a departure from
    the behaviour of an SMC that isn't trapped).
    
    Increment PC in the handler, as the guest is otherwise forever
    stuck...
    
    Cc: stable@vger.kernel.org
    Fixes: acfb3b883f6d ("arm64: KVM: Fix SMCCC handling of unimplemented SMC/HVC calls")
    Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6df8d16adc44ca8791d11449887db87e67bf0688
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:22 2018 +0100

    arm64: Branch predictor hardening for Cavium ThunderX2
    
    
    From: Jayachandran C <jnair@caviumnetworks.com>
    
    commit f3d795d9b360523beca6d13ba64c2c532f601149 upstream.
    
    Use PSCI based mitigation for speculative execution attacks targeting
    the branch predictor. We use the same mechanism as the one used for
    Cortex-A CPUs, we expect the PSCI version call to have a side effect
    of clearing the BTBs.
    
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Jayachandran C <jnair@caviumnetworks.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bad52d7979532b20bce7545c18fe7e443b7472f6
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:21 2018 +0100

    arm64: Implement branch predictor hardening for affected Cortex-A CPUs
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit aa6acde65e03186b5add8151e1ffe36c3c62639b upstream.
    
    Cortex-A57, A72, A73 and A75 are susceptible to branch predictor aliasing
    and can theoretically be attacked by malicious code.
    
    This patch implements a PSCI-based mitigation for these CPUs when available.
    The call into firmware will invalidate the branch predictor state, preventing
    any malicious entries from affecting other victim contexts.
    
    Co-developed-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4bcf61fa86cd8bb150fe89be782ded66e5ff11c3
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:20 2018 +0100

    arm64: cpu_errata: Allow an erratum to be match for all revisions of a core
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit 06f1494f837da8997d670a1ba87add7963b08922 upstream.
    
    Some minor erratum may not be fixed in further revisions of a core,
    leading to a situation where the workaround needs to be updated each
    time an updated core is released.
    
    Introduce a MIDR_ALL_VERSIONS match helper that will work for all
    versions of that MIDR, once and for all.
    
    Acked-by: Thomas Gleixner <tglx@linutronix.de>
    Acked-by: Mark Rutland <mark.rutland@arm.com>
    Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 04b4cc6dabc28c2fe778e5668763be898035a5ba
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:19 2018 +0100

    arm64: cputype: Add missing MIDR values for Cortex-A72 and Cortex-A75
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit a65d219fe5dc7887fd5ca04c2ac3e9a34feb8dfc upstream.
    
    Hook up MIDR values for the Cortex-A72 and Cortex-A75 CPUs, since they
    will soon need MIDR matches for hardening the branch predictor.
    
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 34dc20b03d0e9361c86865adcb9ae7516339cfdb
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:18 2018 +0100

    arm64: entry: Apply BP hardening for suspicious interrupts from EL0
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit 30d88c0e3ace625a92eead9ca0ad94093a8f59fe upstream.
    
    It is possible to take an IRQ from EL0 following a branch to a kernel
    address in such a way that the IRQ is prioritised over the instruction
    abort. Whilst an attacker would need to get the stars to align here,
    it might be sufficient with enough calibration so perform BP hardening
    in the rare case that we see a kernel address in the ELR when handling
    an IRQ from EL0.
    
    Reported-by: Dan Hettena <dhettena@nvidia.com>
    Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e7c3b246edb26b12f420532766e6a39a6410315e
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:17 2018 +0100

    arm64: entry: Apply BP hardening for high-priority synchronous exceptions
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit 5dfc6ed27710c42cbc15db5c0d4475699991da0a upstream.
    
    Software-step and PC alignment fault exceptions have higher priority than
    instruction abort exceptions, so apply the BP hardening hooks there too
    if the user PC appears to reside in kernel space.
    
    Reported-by: Dan Hettena <dhettena@nvidia.com>
    Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9327f0696367b7373c4af5fe4d1fed8b194f68b0
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:16 2018 +0100

    arm64: KVM: Use per-CPU vector when BP hardening is enabled
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit 6840bdd73d07216ab4bc46f5a8768c37ea519038 upstream.
    
    Now that we have per-CPU vectors, let's plug then in the KVM/arm64 code.
    
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: account for files moved to virt/ upstream, use cpus_have_cap()]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 09ea80a05c6a08d0419fa3875a2612f4c462d9d5
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:15 2018 +0100

    mm: Introduce lm_alias
    
    
    From: Laura Abbott <labbott@redhat.com>
    
    commit 568c5fe5a54f2654f5a4c599c45b8a62ed9a2013 upstream.
    
    Certain architectures may have the kernel image mapped separately to
    alias the linear map. Introduce a macro lm_alias to translate a kernel
    image symbol into its linear alias. This is used in part with work to
    add CONFIG_DEBUG_VIRTUAL support for arm64.
    
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Tested-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Laura Abbott <labbott@redhat.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bfacceccc8fd9fd30f70563569d7bd1d1453a841
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:14 2018 +0100

    arm64: Move BP hardening to check_and_switch_context
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit a8e4c0a919ae310944ed2c9ace11cf3ccd8a609b upstream.
    
    We call arm64_apply_bp_hardening() from post_ttbr_update_workaround,
    which has the unexpected consequence of being triggered on every
    exception return to userspace when ARM64_SW_TTBR0_PAN is selected,
    even if no context switch actually occured.
    
    This is a bit suboptimal, and it would be more logical to only
    invalidate the branch predictor when we actually switch to
    a different mm.
    
    In order to solve this, move the call to arm64_apply_bp_hardening()
    into check_and_switch_context(), where we're guaranteed to pick
    a different mm context.
    
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4732001f7721d89d3dc921d5f4c8208405cb88c1
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:13 2018 +0100

    arm64: Add skeleton to harden the branch predictor against aliasing attacks
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit 0f15adbb2861ce6f75ccfc5a92b19eae0ef327d0 upstream.
    
    Aliasing attacks against CPU branch predictors can allow an attacker to
    redirect speculative control flow on some CPUs and potentially divulge
    information from one context to another.
    
    This patch adds initial skeleton code behind a new Kconfig option to
    enable implementation-specific mitigations against these attacks for
    CPUs that are affected.
    
    Co-developed-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: copy bp hardening cb via text mapping]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 20bcfe09d404df14c2a3b0e3fa3ce56326bd8ced
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:12 2018 +0100

    arm64: Move post_ttbr_update_workaround to C code
    
    
    From: Marc Zyngier <marc.zyngier@arm.com>
    
    commit 95e3de3590e3f2358bb13f013911bc1bfa5d3f53 upstream.
    
    We will soon need to invoke a CPU-specific function pointer after changing
    page tables, so move post_ttbr_update_workaround out into C code to make
    this possible.
    
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 965924ee9a73ee7509f0f3a261978931e33ef375
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:11 2018 +0100

    arm64: Factor out TTBR0_EL1 post-update workaround into a specific asm macro
    
    
    From: Catalin Marinas <catalin.marinas@arm.com>
    
    commit f33bcf03e6079668da6bf4eec4a7dcf9289131d0 upstream.
    
    This patch takes the errata workaround code out of cpu_do_switch_mm into
    a dedicated post_ttbr0_update_workaround macro which will be reused in a
    subsequent patch.
    
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Kees Cook <keescook@chromium.org>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6289541c4804c7ed81d7f8a97de7be9a88297752
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:10 2018 +0100

    drivers/firmware: Expose psci_get_version through psci_ops structure
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit d68e3ba5303f7e1099f51fdcd155f5263da8569b upstream.
    
    Entry into recent versions of ARM Trusted Firmware will invalidate the CPU
    branch predictor state in order to protect against aliasing attacks.
    
    This patch exposes the PSCI "VERSION" function via psci_ops, so that it
    can be invoked outside of the PSCI driver where necessary.
    
    Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 92e7a8317d9cbad7eb7952b2de47c10d9a8da81d
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:09 2018 +0100

    arm64: cpufeature: Pass capability structure to ->enable callback
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit 0a0d111d40fd1dc588cc590fab6b55d86ddc71d3 upstream.
    
    In order to invoke the CPU capability ->matches callback from the ->enable
    callback for applying local-CPU workarounds, we need a handle on the
    capability structure.
    
    This patch passes a pointer to the capability structure to the ->enable
    callback.
    
    Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3c31fa5a06b41ba6a30a4a52b93f49a7e9f2cc00
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:08 2018 +0100

    arm64: Run enable method for errata work arounds on late CPUs
    
    
    From: Suzuki K Poulose <suzuki.poulose@arm.com>
    
    commit 55b35d070c2534dfb714b883f3c3ae05d02032da upstream.
    
    When a CPU is brought up after we have finalised the system
    wide capabilities (i.e, features and errata), we make sure the
    new CPU doesn't need a new errata work around which has not been
    detected already. However we don't run enable() method on the new
    CPU for the errata work arounds already detected. This could
    cause the new CPU running without potential work arounds.
    It is upto the "enable()" method to decide if this CPU should
    do something about the errata.
    
    Fixes: commit 6a6efbb45b7d95c84 ("arm64: Verify CPU errata work arounds on hotplugged CPU")
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Andre Przywara <andre.przywara@arm.com>
    Cc: Dave Martin <dave.martin@arm.com>
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 93f339ef4175afdb101b5972b09e7a166bd3265b
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:07 2018 +0100

    arm64: cpufeature: __this_cpu_has_cap() shouldn't stop early
    
    
    From: James Morse <james.morse@arm.com>
    
    commit edf298cfce47ab7279d03b5203ae2ef3a58e49db upstream.
    
    this_cpu_has_cap() tests caps->desc not caps->matches, so it stops
    walking the list when it finds a 'silent' feature, instead of
    walking to the end of the list.
    
    Prior to v4.6's 644c2ae198412 ("arm64: cpufeature: Test 'matches' pointer
    to find the end of the list") we always tested desc to find the end of
    a capability list. This was changed for dubious things like PAN_NOT_UAO.
    v4.7's e3661b128e53e ("arm64: Allow a capability to be checked on
    single CPU") added this_cpu_has_cap() using the old desc style test.
    
    CC: Suzuki K Poulose <suzuki.poulose@arm.com>
    Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Acked-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: James Morse <james.morse@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4504c5ccef54070bdc09f26a7fcb41a3f053ded0
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:05 2018 +0100

    arm64: uaccess: Mask __user pointers for __arch_{clear, copy_*}_user
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit f71c2ffcb20dd8626880747557014bb9a61eb90e upstream.
    
    Like we've done for get_user and put_user, ensure that user pointers
    are masked before invoking the underlying __arch_{clear,copy_*}_user
    operations.
    
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: fixup for v4.9-style uaccess primitives]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4c03928fd68a710ec55b7a07a4e65d2f438a1256
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:04 2018 +0100

    arm64: uaccess: Don't bother eliding access_ok checks in __{get, put}_user
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit 84624087dd7e3b482b7b11c170ebc1f329b3a218 upstream.
    
    access_ok isn't an expensive operation once the addr_limit for the current
    thread has been loaded into the cache. Given that the initial access_ok
    check preceding a sequence of __{get,put}_user operations will take
    the brunt of the miss, we can make the __* variants identical to the
    full-fat versions, which brings with it the benefits of address masking.
    
    The likely cost in these sequences will be from toggling PAN/UAO, which
    we can address later by implementing the *_unsafe versions.
    
    Reviewed-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 346edd61ce1ce5f2a2a3e81518d86b2b239ed4d4
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:03 2018 +0100

    arm64: uaccess: Prevent speculative use of the current addr_limit
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit c2f0ad4fc089cff81cef6a13d04b399980ecbfcc upstream.
    
    A mispredicted conditional call to set_fs could result in the wrong
    addr_limit being forwarded under speculation to a subsequent access_ok
    check, potentially forming part of a spectre-v1 attack using uaccess
    routines.
    
    This patch prevents this forwarding from taking place, but putting heavy
    barriers in set_fs after writing the addr_limit.
    
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f3ed64a6273ebdc1ddf22262c4e5f724688b7393
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:02 2018 +0100

    arm64: entry: Ensure branch through syscall table is bounded under speculation
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit 6314d90e64936c584f300a52ef173603fb2461b5 upstream.
    
    In a similar manner to array_index_mask_nospec, this patch introduces an
    assembly macro (mask_nospec64) which can be used to bound a value under
    speculation. This macro is then used to ensure that the indirect branch
    through the syscall table is bounded under speculation, with out-of-range
    addresses speculating as calls to sys_io_setup (0).
    
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: use existing scno & sc_nr definitions]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 891bea9528a6e48312ac16111a134442ee963726
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:01 2018 +0100

    arm64: Use pointer masking to limit uaccess speculation
    
    
    From: Robin Murphy <robin.murphy@arm.com>
    
    commit 4d8efc2d5ee4c9ccfeb29ee8afd47a8660d0c0ce upstream.
    
    Similarly to x86, mitigate speculation past an access_ok() check by
    masking the pointer against the address limit before use.
    
    Even if we don't expect speculative writes per se, it is plausible that
    a CPU may still speculate at least as far as fetching a cache line for
    writing, hence we also harden put_user() and clear_user() for peace of
    mind.
    
    Signed-off-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c910086de5c484cc435c35017b3d222be652872c
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:11:00 2018 +0100

    arm64: Make USER_DS an inclusive limit
    
    
    From: Robin Murphy <robin.murphy@arm.com>
    
    commit 51369e398d0d33e8f524314e672b07e8cf870e79 upstream.
    
    Currently, USER_DS represents an exclusive limit while KERNEL_DS is
    inclusive. In order to do some clever trickery for speculation-safe
    masking, we need them both to behave equivalently - there aren't enough
    bits to make KERNEL_DS exclusive, so we have precisely one option. This
    also happens to correct a longstanding false negative for a range
    ending on the very top byte of kernel memory.
    
    Mark Rutland points out that we've actually got the semantics of
    addresses vs. segments muddled up in most of the places we need to
    amend, so shuffle the {USER,KERNEL}_DS definitions around such that we
    can correct those properly instead of just pasting "-1"s everywhere.
    
    Signed-off-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [v4.9: avoid dependence on TTBR0 SW PAN and THREAD_INFO_IN_TASK_STRUCT]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 27eeceda11e50477b11a35573776c4622aff5c29
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:10:59 2018 +0100

    arm64: move TASK_* definitions to <asm/processor.h>
    
    
    From: Yury Norov <ynorov@caviumnetworks.com>
    
    commit eef94a3d09aab437c8c254de942d8b1aa76455e2 upstream.
    
    ILP32 series [1] introduces the dependency on <asm/is_compat.h> for
    TASK_SIZE macro. Which in turn requires <asm/thread_info.h>, and
    <asm/thread_info.h> include <asm/memory.h>, giving a circular dependency,
    because TASK_SIZE is currently located in <asm/memory.h>.
    
    In other architectures, TASK_SIZE is defined in <asm/processor.h>, and
    moving TASK_SIZE there fixes the problem.
    
    Discussion: https://patchwork.kernel.org/patch/9929107/
    
    [1] https://github.com/norov/linux/tree/ilp32-next
    
    CC: Will Deacon <will.deacon@arm.com>
    CC: Laura Abbott <labbott@redhat.com>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Suggested-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    [v4.9: necessary for making USER_DS an inclusive limit]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d89be0087b372c3a527bcd05ebed0d354d2b7fe1
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:10:58 2018 +0100

    arm64: Implement array_index_mask_nospec()
    
    
    From: Robin Murphy <robin.murphy@arm.com>
    
    commit 022620eed3d0bc4bf2027326f599f5ad71c2ea3f upstream.
    
    Provide an optimised, assembly implementation of array_index_mask_nospec()
    for arm64 so that the compiler is not in a position to transform the code
    in ways which affect its ability to inhibit speculation (e.g. by introducing
    conditional branches).
    
    This is similar to the sequence used by x86, modulo architectural differences
    in the carry/borrow flags.
    
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit afc09540dab21e717ae116f646455eb812cbf11c
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Apr 12 12:10:57 2018 +0100

    arm64: barrier: Add CSDB macros to control data-value prediction
    
    
    From: Will Deacon <will.deacon@arm.com>
    
    commit 669474e772b952b14f4de4845a1558fd4c0414a4 upstream.
    
    For CPUs capable of data value prediction, CSDB waits for any outstanding
    predictions to architecturally resolve before allowing speculative execution
    to continue. Provide macros to expose it to the arch code.
    
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com [v4.9 backport]
    Tested-by: Greg Hackmann <ghackmann@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cacf021760ee51ef163b1094c9163a863be6b104
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 b951ffb160f765db6b06b9ee065f79faed5fa9e1
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 57ce7d4b43db2ec16807a50a12b4724f60c6a641
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 2c1f44bdf8e088c693189edf4233ad8eb09faa65
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 6a33036b130a2ad01f16a205ef36b21d1b89f10a
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 aad2ad6e3cd0c59786b15acd6a220fe5068d3a10
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 6408066f849ee17f0db76e8f091b759242ea2f52
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 68401e8b681329976f2a988fbfe0480e1abd6440
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 394a9a7b7387e5cc8661b45e9bd111c850437c8e
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>
