]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 7 Sep 2018 11:22:21 +0000 (13:22 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 7 Sep 2018 11:22:21 +0000 (13:22 +0200)
added patches:
arm-tegra-fix-tegra30-cardhu-pca954x-reset.patch
fix-kexec-forbidding-kernels-signed-with-keys-in-the-secondary-keyring-to-boot.patch
kvm-vmx-fixes-for-vmentry_l1d_flush-module-parameter.patch
nfsv4-client-live-hangs-after-live-data-migration-recovery.patch
pm-sleep-wakeup-fix-build-error-caused-by-missing-srcu-support.patch
pnfs-blocklayout-off-by-one-in-bl_map_stripe.patch
replace-magic-for-trusting-the-secondary-keyring-with-define.patch
xtensa-increase-ranges-in-___invalidate_-i-d-cache_all.patch
xtensa-limit-offsets-in-__loop_cache_-all-page.patch

queue-4.9/arm-tegra-fix-tegra30-cardhu-pca954x-reset.patch [new file with mode: 0644]
queue-4.9/fix-kexec-forbidding-kernels-signed-with-keys-in-the-secondary-keyring-to-boot.patch [new file with mode: 0644]
queue-4.9/kvm-vmx-fixes-for-vmentry_l1d_flush-module-parameter.patch [new file with mode: 0644]
queue-4.9/nfsv4-client-live-hangs-after-live-data-migration-recovery.patch [new file with mode: 0644]
queue-4.9/pm-sleep-wakeup-fix-build-error-caused-by-missing-srcu-support.patch [new file with mode: 0644]
queue-4.9/pnfs-blocklayout-off-by-one-in-bl_map_stripe.patch [new file with mode: 0644]
queue-4.9/replace-magic-for-trusting-the-secondary-keyring-with-define.patch [new file with mode: 0644]
queue-4.9/series
queue-4.9/xtensa-increase-ranges-in-___invalidate_-i-d-cache_all.patch [new file with mode: 0644]
queue-4.9/xtensa-limit-offsets-in-__loop_cache_-all-page.patch [new file with mode: 0644]

diff --git a/queue-4.9/arm-tegra-fix-tegra30-cardhu-pca954x-reset.patch b/queue-4.9/arm-tegra-fix-tegra30-cardhu-pca954x-reset.patch
new file mode 100644 (file)
index 0000000..f7c7900
--- /dev/null
@@ -0,0 +1,44 @@
+From 6e1811900b6fe6f2b4665dba6bd6ed32c6b98575 Mon Sep 17 00:00:00 2001
+From: Jon Hunter <jonathanh@nvidia.com>
+Date: Tue, 3 Jul 2018 09:59:47 +0100
+Subject: ARM: tegra: Fix Tegra30 Cardhu PCA954x reset
+
+From: Jon Hunter <jonathanh@nvidia.com>
+
+commit 6e1811900b6fe6f2b4665dba6bd6ed32c6b98575 upstream.
+
+On all versions of Tegra30 Cardhu, the reset signal to the NXP PCA9546
+I2C mux is connected to the Tegra GPIO BB0. Currently, this pin on the
+Tegra is not configured as a GPIO but as a special-function IO (SFIO)
+that is multiplexing the pin to an I2S controller. On exiting system
+suspend, I2C commands sent to the PCA9546 are failing because there is
+no ACK. Although it is not possible to see exactly what is happening
+to the reset during suspend, by ensuring it is configured as a GPIO
+and driven high, to de-assert the reset, the failures are no longer
+seen.
+
+Please note that this GPIO is also used to drive the reset signal
+going to the camera connector on the board. However, given that there
+is no camera support currently for Cardhu, this should not have any
+impact.
+
+Fixes: 40431d16ff11 ("ARM: tegra: enable PCA9546 on Cardhu")
+Cc: stable@vger.kernel.org
+Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
+Signed-off-by: Thierry Reding <treding@nvidia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/boot/dts/tegra30-cardhu.dtsi |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/arm/boot/dts/tegra30-cardhu.dtsi
++++ b/arch/arm/boot/dts/tegra30-cardhu.dtsi
+@@ -205,6 +205,7 @@
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x70>;
++                      reset-gpio = <&gpio TEGRA_GPIO(BB, 0) GPIO_ACTIVE_LOW>;
+               };
+       };
diff --git a/queue-4.9/fix-kexec-forbidding-kernels-signed-with-keys-in-the-secondary-keyring-to-boot.patch b/queue-4.9/fix-kexec-forbidding-kernels-signed-with-keys-in-the-secondary-keyring-to-boot.patch
new file mode 100644 (file)
index 0000000..adc419e
--- /dev/null
@@ -0,0 +1,41 @@
+From ea93102f32244e3f45c8b26260be77ed0cc1d16c Mon Sep 17 00:00:00 2001
+From: Yannik Sembritzki <yannik@sembritzki.me>
+Date: Thu, 16 Aug 2018 14:05:23 +0100
+Subject: Fix kexec forbidding kernels signed with keys in the secondary keyring to boot
+
+From: Yannik Sembritzki <yannik@sembritzki.me>
+
+commit ea93102f32244e3f45c8b26260be77ed0cc1d16c upstream.
+
+The split of .system_keyring into .builtin_trusted_keys and
+.secondary_trusted_keys broke kexec, thereby preventing kernels signed by
+keys which are now in the secondary keyring from being kexec'd.
+
+Fix this by passing VERIFY_USE_SECONDARY_KEYRING to
+verify_pefile_signature().
+
+Fixes: d3bfe84129f6 ("certs: Add a secondary system keyring that can be added to dynamically")
+Signed-off-by: Yannik Sembritzki <yannik@sembritzki.me>
+Signed-off-by: David Howells <dhowells@redhat.com>
+Cc: kexec@lists.infradead.org
+Cc: keyrings@vger.kernel.org
+Cc: linux-security-module@vger.kernel.org
+Cc: stable@kernel.org
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kernel/kexec-bzimage64.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/x86/kernel/kexec-bzimage64.c
++++ b/arch/x86/kernel/kexec-bzimage64.c
+@@ -529,7 +529,7 @@ static int bzImage64_cleanup(void *loade
+ static int bzImage64_verify_sig(const char *kernel, unsigned long kernel_len)
+ {
+       return verify_pefile_signature(kernel, kernel_len,
+-                                     NULL,
++                                     VERIFY_USE_SECONDARY_KEYRING,
+                                      VERIFYING_KEXEC_PE_SIGNATURE);
+ }
+ #endif
diff --git a/queue-4.9/kvm-vmx-fixes-for-vmentry_l1d_flush-module-parameter.patch b/queue-4.9/kvm-vmx-fixes-for-vmentry_l1d_flush-module-parameter.patch
new file mode 100644 (file)
index 0000000..9eac854
--- /dev/null
@@ -0,0 +1,94 @@
+From 0027ff2a75f9dcf0537ac0a65c5840b0e21a4950 Mon Sep 17 00:00:00 2001
+From: Paolo Bonzini <pbonzini@redhat.com>
+Date: Wed, 22 Aug 2018 16:43:39 +0200
+Subject: KVM: VMX: fixes for vmentry_l1d_flush module parameter
+
+From: Paolo Bonzini <pbonzini@redhat.com>
+
+commit 0027ff2a75f9dcf0537ac0a65c5840b0e21a4950 upstream.
+
+Two bug fixes:
+
+1) missing entries in the l1d_param array; this can cause a host crash
+if an access attempts to reach the missing entry. Future-proof the get
+function against any overflows as well.  However, the two entries
+VMENTER_L1D_FLUSH_EPT_DISABLED and VMENTER_L1D_FLUSH_NOT_REQUIRED must
+not be accepted by the parse function, so disable them there.
+
+2) invalid values must be rejected even if the CPU does not have the
+bug, so test for them before checking boot_cpu_has(X86_BUG_L1TF)
+
+... and a small refactoring, since the .cmd field is redundant with
+the index in the array.
+
+Reported-by: Bandan Das <bsd@redhat.com>
+Cc: stable@vger.kernel.org
+Fixes: a7b9020b06ec6d7c3f3b0d4ef1a9eba12654f4f7
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kvm/vmx.c |   26 ++++++++++++++++----------
+ 1 file changed, 16 insertions(+), 10 deletions(-)
+
+--- a/arch/x86/kvm/vmx.c
++++ b/arch/x86/kvm/vmx.c
+@@ -198,12 +198,14 @@ static enum vmx_l1d_flush_state __read_m
+ static const struct {
+       const char *option;
+-      enum vmx_l1d_flush_state cmd;
++      bool for_parse;
+ } vmentry_l1d_param[] = {
+-      {"auto",        VMENTER_L1D_FLUSH_AUTO},
+-      {"never",       VMENTER_L1D_FLUSH_NEVER},
+-      {"cond",        VMENTER_L1D_FLUSH_COND},
+-      {"always",      VMENTER_L1D_FLUSH_ALWAYS},
++      [VMENTER_L1D_FLUSH_AUTO]         = {"auto", true},
++      [VMENTER_L1D_FLUSH_NEVER]        = {"never", true},
++      [VMENTER_L1D_FLUSH_COND]         = {"cond", true},
++      [VMENTER_L1D_FLUSH_ALWAYS]       = {"always", true},
++      [VMENTER_L1D_FLUSH_EPT_DISABLED] = {"EPT disabled", false},
++      [VMENTER_L1D_FLUSH_NOT_REQUIRED] = {"not required", false},
+ };
+ #define L1D_CACHE_ORDER 4
+@@ -287,8 +289,9 @@ static int vmentry_l1d_flush_parse(const
+       if (s) {
+               for (i = 0; i < ARRAY_SIZE(vmentry_l1d_param); i++) {
+-                      if (sysfs_streq(s, vmentry_l1d_param[i].option))
+-                              return vmentry_l1d_param[i].cmd;
++                      if (vmentry_l1d_param[i].for_parse &&
++                          sysfs_streq(s, vmentry_l1d_param[i].option))
++                              return i;
+               }
+       }
+       return -EINVAL;
+@@ -298,13 +301,13 @@ static int vmentry_l1d_flush_set(const c
+ {
+       int l1tf, ret;
+-      if (!boot_cpu_has(X86_BUG_L1TF))
+-              return 0;
+-
+       l1tf = vmentry_l1d_flush_parse(s);
+       if (l1tf < 0)
+               return l1tf;
++      if (!boot_cpu_has(X86_BUG_L1TF))
++              return 0;
++
+       /*
+        * Has vmx_init() run already? If not then this is the pre init
+        * parameter parsing. In that case just store the value and let
+@@ -324,6 +327,9 @@ static int vmentry_l1d_flush_set(const c
+ static int vmentry_l1d_flush_get(char *s, const struct kernel_param *kp)
+ {
++      if (WARN_ON_ONCE(l1tf_vmx_mitigation >= ARRAY_SIZE(vmentry_l1d_param)))
++              return sprintf(s, "???\n");
++
+       return sprintf(s, "%s\n", vmentry_l1d_param[l1tf_vmx_mitigation].option);
+ }
diff --git a/queue-4.9/nfsv4-client-live-hangs-after-live-data-migration-recovery.patch b/queue-4.9/nfsv4-client-live-hangs-after-live-data-migration-recovery.patch
new file mode 100644 (file)
index 0000000..ce972ec
--- /dev/null
@@ -0,0 +1,129 @@
+From 0f90be132cbf1537d87a6a8b9e80867adac892f6 Mon Sep 17 00:00:00 2001
+From: Bill Baker <Bill.Baker@Oracle.com>
+Date: Tue, 19 Jun 2018 16:24:58 -0500
+Subject: NFSv4 client live hangs after live data migration recovery
+
+From: Bill Baker <Bill.Baker@Oracle.com>
+
+commit 0f90be132cbf1537d87a6a8b9e80867adac892f6 upstream.
+
+After a live data migration event at the NFS server, the client may send
+I/O requests to the wrong server, causing a live hang due to repeated
+recovery events.  On the wire, this will appear as an I/O request failing
+with NFS4ERR_BADSESSION, followed by successful CREATE_SESSION, repeatedly.
+NFS4ERR_BADSSESSION is returned because the session ID being used was
+issued by the other server and is not valid at the old server.
+
+The failure is caused by async worker threads having cached the transport
+(xprt) in the rpc_task structure.  After the migration recovery completes,
+the task is redispatched and the task resends the request to the wrong
+server based on the old value still present in tk_xprt.
+
+The solution is to recompute the tk_xprt field of the rpc_task structure
+so that the request goes to the correct server.
+
+Signed-off-by: Bill Baker <bill.baker@oracle.com>
+Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
+Tested-by: Helen Chao <helen.chao@oracle.com>
+Fixes: fb43d17210ba ("SUNRPC: Use the multipath iterator to assign a ...")
+Cc: stable@vger.kernel.org # v4.9+
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/nfs/nfs4proc.c           |    9 ++++++++-
+ include/linux/sunrpc/clnt.h |    1 +
+ net/sunrpc/clnt.c           |   28 ++++++++++++++++++++--------
+ 3 files changed, 29 insertions(+), 9 deletions(-)
+
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -541,8 +541,15 @@ nfs4_async_handle_exception(struct rpc_t
+               ret = -EIO;
+       return ret;
+ out_retry:
+-      if (ret == 0)
++      if (ret == 0) {
+               exception->retry = 1;
++              /*
++               * For NFS4ERR_MOVED, the client transport will need to
++               * be recomputed after migration recovery has completed.
++               */
++              if (errorcode == -NFS4ERR_MOVED)
++                      rpc_task_release_transport(task);
++      }
+       return ret;
+ }
+--- a/include/linux/sunrpc/clnt.h
++++ b/include/linux/sunrpc/clnt.h
+@@ -155,6 +155,7 @@ int                rpc_switch_client_transport(struct
+ void          rpc_shutdown_client(struct rpc_clnt *);
+ void          rpc_release_client(struct rpc_clnt *);
++void          rpc_task_release_transport(struct rpc_task *);
+ void          rpc_task_release_client(struct rpc_task *);
+ int           rpcb_create_local(struct net *);
+--- a/net/sunrpc/clnt.c
++++ b/net/sunrpc/clnt.c
+@@ -965,10 +965,20 @@ out:
+ }
+ EXPORT_SYMBOL_GPL(rpc_bind_new_program);
++void rpc_task_release_transport(struct rpc_task *task)
++{
++      struct rpc_xprt *xprt = task->tk_xprt;
++
++      if (xprt) {
++              task->tk_xprt = NULL;
++              xprt_put(xprt);
++      }
++}
++EXPORT_SYMBOL_GPL(rpc_task_release_transport);
++
+ void rpc_task_release_client(struct rpc_task *task)
+ {
+       struct rpc_clnt *clnt = task->tk_client;
+-      struct rpc_xprt *xprt = task->tk_xprt;
+       if (clnt != NULL) {
+               /* Remove from client task list */
+@@ -979,12 +989,14 @@ void rpc_task_release_client(struct rpc_
+               rpc_release_client(clnt);
+       }
++      rpc_task_release_transport(task);
++}
+-      if (xprt != NULL) {
+-              task->tk_xprt = NULL;
+-
+-              xprt_put(xprt);
+-      }
++static
++void rpc_task_set_transport(struct rpc_task *task, struct rpc_clnt *clnt)
++{
++      if (!task->tk_xprt)
++              task->tk_xprt = xprt_iter_get_next(&clnt->cl_xpi);
+ }
+ static
+@@ -992,8 +1004,7 @@ void rpc_task_set_client(struct rpc_task
+ {
+       if (clnt != NULL) {
+-              if (task->tk_xprt == NULL)
+-                      task->tk_xprt = xprt_iter_get_next(&clnt->cl_xpi);
++              rpc_task_set_transport(task, clnt);
+               task->tk_client = clnt;
+               atomic_inc(&clnt->cl_count);
+               if (clnt->cl_softrtry)
+@@ -1550,6 +1561,7 @@ call_start(struct rpc_task *task)
+       task->tk_msg.rpc_proc->p_count++;
+       clnt->cl_stats->rpccnt++;
+       task->tk_action = call_reserve;
++      rpc_task_set_transport(task, clnt);
+ }
+ /*
diff --git a/queue-4.9/pm-sleep-wakeup-fix-build-error-caused-by-missing-srcu-support.patch b/queue-4.9/pm-sleep-wakeup-fix-build-error-caused-by-missing-srcu-support.patch
new file mode 100644 (file)
index 0000000..501fac3
--- /dev/null
@@ -0,0 +1,53 @@
+From 3df6f61fff49632492490fb6e42646b803a9958a Mon Sep 17 00:00:00 2001
+From: "zhangyi (F)" <yi.zhang@huawei.com>
+Date: Tue, 14 Aug 2018 10:34:42 +0800
+Subject: PM / sleep: wakeup: Fix build error caused by missing SRCU support
+
+From: zhangyi (F) <yi.zhang@huawei.com>
+
+commit 3df6f61fff49632492490fb6e42646b803a9958a upstream.
+
+Commit ea0212f40c6 (power: auto select CONFIG_SRCU) made the code in
+drivers/base/power/wakeup.c use SRCU instead of RCU, but it forgot to
+select CONFIG_SRCU in Kconfig, which leads to the following build
+error if CONFIG_SRCU is not selected somewhere else:
+
+drivers/built-in.o: In function `wakeup_source_remove':
+(.text+0x3c6fc): undefined reference to `synchronize_srcu'
+drivers/built-in.o: In function `pm_print_active_wakeup_sources':
+(.text+0x3c7a8): undefined reference to `__srcu_read_lock'
+drivers/built-in.o: In function `pm_print_active_wakeup_sources':
+(.text+0x3c84c): undefined reference to `__srcu_read_unlock'
+drivers/built-in.o: In function `device_wakeup_arm_wake_irqs':
+(.text+0x3d1d8): undefined reference to `__srcu_read_lock'
+drivers/built-in.o: In function `device_wakeup_arm_wake_irqs':
+(.text+0x3d228): undefined reference to `__srcu_read_unlock'
+drivers/built-in.o: In function `device_wakeup_disarm_wake_irqs':
+(.text+0x3d24c): undefined reference to `__srcu_read_lock'
+drivers/built-in.o: In function `device_wakeup_disarm_wake_irqs':
+(.text+0x3d29c): undefined reference to `__srcu_read_unlock'
+drivers/built-in.o:(.data+0x4158): undefined reference to `process_srcu'
+
+Fix this error by selecting CONFIG_SRCU when PM_SLEEP is enabled.
+
+Fixes: ea0212f40c6 (power: auto select CONFIG_SRCU)
+Cc: 4.2+ <stable@vger.kernel.org> # 4.2+
+Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
+[ rjw: Minor subject/changelog fixups ]
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/power/Kconfig |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/kernel/power/Kconfig
++++ b/kernel/power/Kconfig
+@@ -105,6 +105,7 @@ config PM_SLEEP
+       def_bool y
+       depends on SUSPEND || HIBERNATE_CALLBACKS
+       select PM
++      select SRCU
+ config PM_SLEEP_SMP
+       def_bool y
diff --git a/queue-4.9/pnfs-blocklayout-off-by-one-in-bl_map_stripe.patch b/queue-4.9/pnfs-blocklayout-off-by-one-in-bl_map_stripe.patch
new file mode 100644 (file)
index 0000000..15cc59c
--- /dev/null
@@ -0,0 +1,37 @@
+From 0914bb965e38a055e9245637aed117efbe976e91 Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <dan.carpenter@oracle.com>
+Date: Wed, 4 Jul 2018 12:59:58 +0300
+Subject: pnfs/blocklayout: off by one in bl_map_stripe()
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+commit 0914bb965e38a055e9245637aed117efbe976e91 upstream.
+
+"dev->nr_children" is the number of children which were parsed
+successfully in bl_parse_stripe().  It could be all of them and then, in
+that case, it is equal to v->stripe.volumes_count.  Either way, the >
+should be >= so that we don't go beyond the end of what we're supposed
+to.
+
+Fixes: 5c83746a0cf2 ("pnfs/blocklayout: in-kernel GETDEVICEINFO XDR parsing")
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Cc: stable@vger.kernel.org # 3.17+
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/nfs/blocklayout/dev.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/nfs/blocklayout/dev.c
++++ b/fs/nfs/blocklayout/dev.c
+@@ -203,7 +203,7 @@ static bool bl_map_stripe(struct pnfs_bl
+       chunk = div_u64(offset, dev->chunk_size);
+       div_u64_rem(chunk, dev->nr_children, &chunk_idx);
+-      if (chunk_idx > dev->nr_children) {
++      if (chunk_idx >= dev->nr_children) {
+               dprintk("%s: invalid chunk idx %d (%lld/%lld)\n",
+                       __func__, chunk_idx, offset, dev->chunk_size);
+               /* error, should not happen */
diff --git a/queue-4.9/replace-magic-for-trusting-the-secondary-keyring-with-define.patch b/queue-4.9/replace-magic-for-trusting-the-secondary-keyring-with-define.patch
new file mode 100644 (file)
index 0000000..8cf368f
--- /dev/null
@@ -0,0 +1,70 @@
+From 817aef260037f33ee0f44c17fe341323d3aebd6d Mon Sep 17 00:00:00 2001
+From: Yannik Sembritzki <yannik@sembritzki.me>
+Date: Thu, 16 Aug 2018 14:05:10 +0100
+Subject: Replace magic for trusting the secondary keyring with #define
+
+From: Yannik Sembritzki <yannik@sembritzki.me>
+
+commit 817aef260037f33ee0f44c17fe341323d3aebd6d upstream.
+
+Replace the use of a magic number that indicates that verify_*_signature()
+should use the secondary keyring with a symbol.
+
+Signed-off-by: Yannik Sembritzki <yannik@sembritzki.me>
+Signed-off-by: David Howells <dhowells@redhat.com>
+Cc: keyrings@vger.kernel.org
+Cc: linux-security-module@vger.kernel.org
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ certs/system_keyring.c                  |    3 ++-
+ crypto/asymmetric_keys/pkcs7_key_type.c |    2 +-
+ include/linux/verification.h            |    6 ++++++
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+--- a/certs/system_keyring.c
++++ b/certs/system_keyring.c
+@@ -14,6 +14,7 @@
+ #include <linux/sched.h>
+ #include <linux/cred.h>
+ #include <linux/err.h>
++#include <linux/verification.h>
+ #include <keys/asymmetric-type.h>
+ #include <keys/system_keyring.h>
+ #include <crypto/pkcs7.h>
+@@ -207,7 +208,7 @@ int verify_pkcs7_signature(const void *d
+       if (!trusted_keys) {
+               trusted_keys = builtin_trusted_keys;
+-      } else if (trusted_keys == (void *)1UL) {
++      } else if (trusted_keys == VERIFY_USE_SECONDARY_KEYRING) {
+ #ifdef CONFIG_SECONDARY_TRUSTED_KEYRING
+               trusted_keys = secondary_trusted_keys;
+ #else
+--- a/crypto/asymmetric_keys/pkcs7_key_type.c
++++ b/crypto/asymmetric_keys/pkcs7_key_type.c
+@@ -62,7 +62,7 @@ static int pkcs7_preparse(struct key_pre
+       return verify_pkcs7_signature(NULL, 0,
+                                     prep->data, prep->datalen,
+-                                    (void *)1UL, usage,
++                                    VERIFY_USE_SECONDARY_KEYRING, usage,
+                                     pkcs7_view_content, prep);
+ }
+--- a/include/linux/verification.h
++++ b/include/linux/verification.h
+@@ -13,6 +13,12 @@
+ #define _LINUX_VERIFICATION_H
+ /*
++ * Indicate that both builtin trusted keys and secondary trusted keys
++ * should be used.
++ */
++#define VERIFY_USE_SECONDARY_KEYRING ((struct key *)1UL)
++
++/*
+  * The use to which an asymmetric key is being put.
+  */
+ enum key_being_used_for {
index 280e12b1b6f1d2a075e14a10c9f3a95f34c8277e..62aabd78bf8e59f2239bcd810713d767b9259d27 100644 (file)
@@ -31,3 +31,12 @@ tracing-blktrace-fix-to-allow-setting-same-value.patch
 uprobes-use-synchronize_rcu-not-synchronize_sched.patch
 mfd-hi655x-fix-regmap-area-declared-size-for-hi655x.patch
 9p-fix-multiple-null-pointer-dereferences.patch
+pm-sleep-wakeup-fix-build-error-caused-by-missing-srcu-support.patch
+kvm-vmx-fixes-for-vmentry_l1d_flush-module-parameter.patch
+xtensa-limit-offsets-in-__loop_cache_-all-page.patch
+xtensa-increase-ranges-in-___invalidate_-i-d-cache_all.patch
+pnfs-blocklayout-off-by-one-in-bl_map_stripe.patch
+nfsv4-client-live-hangs-after-live-data-migration-recovery.patch
+arm-tegra-fix-tegra30-cardhu-pca954x-reset.patch
+replace-magic-for-trusting-the-secondary-keyring-with-define.patch
+fix-kexec-forbidding-kernels-signed-with-keys-in-the-secondary-keyring-to-boot.patch
diff --git a/queue-4.9/xtensa-increase-ranges-in-___invalidate_-i-d-cache_all.patch b/queue-4.9/xtensa-increase-ranges-in-___invalidate_-i-d-cache_all.patch
new file mode 100644 (file)
index 0000000..8885011
--- /dev/null
@@ -0,0 +1,48 @@
+From fec3259c9f747c039f90e99570540114c8d81a14 Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Fri, 10 Aug 2018 22:21:22 -0700
+Subject: xtensa: increase ranges in ___invalidate_{i,d}cache_all
+
+From: Max Filippov <jcmvbkbc@gmail.com>
+
+commit fec3259c9f747c039f90e99570540114c8d81a14 upstream.
+
+Cache invalidation macros use cache line size to iterate over
+invalidated cache lines, assuming that all cache ways are invalidated by
+single instruction, but xtensa ISA recommends to not assume that for
+future compatibility:
+  In some implementations all ways at index Addry-1..z are invalidated
+  regardless of the specified way, but for future compatibility this
+  behavior should not be assumed.
+
+Iterate over all cache ways in ___invalidate_icache_all and
+___invalidate_dcache_all.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/xtensa/include/asm/cacheasm.h |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/xtensa/include/asm/cacheasm.h
++++ b/arch/xtensa/include/asm/cacheasm.h
+@@ -123,7 +123,7 @@
+       .macro  ___invalidate_dcache_all ar at
+ #if XCHAL_DCACHE_SIZE
+-      __loop_cache_all \ar \at dii __stringify(DCACHE_WAY_SIZE) \
++      __loop_cache_all \ar \at dii XCHAL_DCACHE_SIZE \
+                        XCHAL_DCACHE_LINEWIDTH 1020
+ #endif
+@@ -133,7 +133,7 @@
+       .macro  ___invalidate_icache_all ar at
+ #if XCHAL_ICACHE_SIZE
+-      __loop_cache_all \ar \at iii __stringify(ICACHE_WAY_SIZE) \
++      __loop_cache_all \ar \at iii XCHAL_ICACHE_SIZE \
+                        XCHAL_ICACHE_LINEWIDTH 1020
+ #endif
diff --git a/queue-4.9/xtensa-limit-offsets-in-__loop_cache_-all-page.patch b/queue-4.9/xtensa-limit-offsets-in-__loop_cache_-all-page.patch
new file mode 100644 (file)
index 0000000..3cff794
--- /dev/null
@@ -0,0 +1,191 @@
+From be75de25251f7cf3e399ca1f584716a95510d24a Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Fri, 10 Aug 2018 20:43:48 -0700
+Subject: xtensa: limit offsets in __loop_cache_{all,page}
+
+From: Max Filippov <jcmvbkbc@gmail.com>
+
+commit be75de25251f7cf3e399ca1f584716a95510d24a upstream.
+
+When building kernel for xtensa cores with big cache lines (e.g. 128
+bytes or more) __loop_cache_all and __loop_cache_page may generate
+assembly instructions with immediate fields that are too big. This
+results in the following build errors:
+
+  arch/xtensa/mm/misc.S: Assembler messages:
+  arch/xtensa/mm/misc.S:464: Error: operand 2 of 'diwbi' has invalid value '256'
+  arch/xtensa/mm/misc.S:464: Error: operand 2 of 'diwbi' has invalid value '384'
+  arch/xtensa/kernel/head.S: Assembler messages:
+  arch/xtensa/kernel/head.S:172: Error: operand 2 of 'diu' has invalid value '256'
+  arch/xtensa/kernel/head.S:172: Error: operand 2 of 'diu' has invalid value '384'
+  arch/xtensa/kernel/head.S:176: Error: operand 2 of 'iiu' has invalid value '256'
+  arch/xtensa/kernel/head.S:176: Error: operand 2 of 'iiu' has invalid value '384'
+  arch/xtensa/kernel/head.S:255: Error: operand 2 of 'diwb' has invalid value '256'
+  arch/xtensa/kernel/head.S:255: Error: operand 2 of 'diwb' has invalid value '384'
+
+Add parameter max_immed to these macros and use it to limit values of
+immediate operands. Extract common code of these macros into the new
+macro __loop_cache_unroll.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/xtensa/include/asm/cacheasm.h |   65 ++++++++++++++++++++++---------------
+ 1 file changed, 40 insertions(+), 25 deletions(-)
+
+--- a/arch/xtensa/include/asm/cacheasm.h
++++ b/arch/xtensa/include/asm/cacheasm.h
+@@ -31,16 +31,32 @@
+  *
+  */
+-      .macro  __loop_cache_all ar at insn size line_width
+-      movi    \ar, 0
++      .macro  __loop_cache_unroll ar at insn size line_width max_immed
++
++      .if     (1 << (\line_width)) > (\max_immed)
++      .set    _reps, 1
++      .elseif (2 << (\line_width)) > (\max_immed)
++      .set    _reps, 2
++      .else
++      .set    _reps, 4
++      .endif
++
++      __loopi \ar, \at, \size, (_reps << (\line_width))
++      .set    _index, 0
++      .rep    _reps
++      \insn   \ar, _index << (\line_width)
++      .set    _index, _index + 1
++      .endr
++      __endla \ar, \at, _reps << (\line_width)
++
++      .endm
++
+-      __loopi \ar, \at, \size, (4 << (\line_width))
+-      \insn   \ar, 0 << (\line_width)
+-      \insn   \ar, 1 << (\line_width)
+-      \insn   \ar, 2 << (\line_width)
+-      \insn   \ar, 3 << (\line_width)
+-      __endla \ar, \at, 4 << (\line_width)
++      .macro  __loop_cache_all ar at insn size line_width max_immed
++
++      movi    \ar, 0
++      __loop_cache_unroll \ar, \at, \insn, \size, \line_width, \max_immed
+       .endm
+@@ -57,14 +73,9 @@
+       .endm
+-      .macro  __loop_cache_page ar at insn line_width
++      .macro  __loop_cache_page ar at insn line_width max_immed
+-      __loopi \ar, \at, PAGE_SIZE, 4 << (\line_width)
+-      \insn   \ar, 0 << (\line_width)
+-      \insn   \ar, 1 << (\line_width)
+-      \insn   \ar, 2 << (\line_width)
+-      \insn   \ar, 3 << (\line_width)
+-      __endla \ar, \at, 4 << (\line_width)
++      __loop_cache_unroll \ar, \at, \insn, PAGE_SIZE, \line_width, \max_immed
+       .endm
+@@ -72,7 +83,8 @@
+       .macro  ___unlock_dcache_all ar at
+ #if XCHAL_DCACHE_LINE_LOCKABLE && XCHAL_DCACHE_SIZE
+-      __loop_cache_all \ar \at diu XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH
++      __loop_cache_all \ar \at diu XCHAL_DCACHE_SIZE \
++              XCHAL_DCACHE_LINEWIDTH 240
+ #endif
+       .endm
+@@ -81,7 +93,8 @@
+       .macro  ___unlock_icache_all ar at
+ #if XCHAL_ICACHE_LINE_LOCKABLE && XCHAL_ICACHE_SIZE
+-      __loop_cache_all \ar \at iiu XCHAL_ICACHE_SIZE XCHAL_ICACHE_LINEWIDTH
++      __loop_cache_all \ar \at iiu XCHAL_ICACHE_SIZE \
++              XCHAL_ICACHE_LINEWIDTH 240
+ #endif
+       .endm
+@@ -90,7 +103,8 @@
+       .macro  ___flush_invalidate_dcache_all ar at
+ #if XCHAL_DCACHE_SIZE
+-      __loop_cache_all \ar \at diwbi XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH
++      __loop_cache_all \ar \at diwbi XCHAL_DCACHE_SIZE \
++              XCHAL_DCACHE_LINEWIDTH 240
+ #endif
+       .endm
+@@ -99,7 +113,8 @@
+       .macro  ___flush_dcache_all ar at
+ #if XCHAL_DCACHE_SIZE
+-      __loop_cache_all \ar \at diwb XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH
++      __loop_cache_all \ar \at diwb XCHAL_DCACHE_SIZE \
++              XCHAL_DCACHE_LINEWIDTH 240
+ #endif
+       .endm
+@@ -109,7 +124,7 @@
+ #if XCHAL_DCACHE_SIZE
+       __loop_cache_all \ar \at dii __stringify(DCACHE_WAY_SIZE) \
+-                       XCHAL_DCACHE_LINEWIDTH
++                       XCHAL_DCACHE_LINEWIDTH 1020
+ #endif
+       .endm
+@@ -119,7 +134,7 @@
+ #if XCHAL_ICACHE_SIZE
+       __loop_cache_all \ar \at iii __stringify(ICACHE_WAY_SIZE) \
+-                       XCHAL_ICACHE_LINEWIDTH
++                       XCHAL_ICACHE_LINEWIDTH 1020
+ #endif
+       .endm
+@@ -166,7 +181,7 @@
+       .macro  ___flush_invalidate_dcache_page ar as
+ #if XCHAL_DCACHE_SIZE
+-      __loop_cache_page \ar \as dhwbi XCHAL_DCACHE_LINEWIDTH
++      __loop_cache_page \ar \as dhwbi XCHAL_DCACHE_LINEWIDTH 1020
+ #endif
+       .endm
+@@ -175,7 +190,7 @@
+       .macro ___flush_dcache_page ar as
+ #if XCHAL_DCACHE_SIZE
+-      __loop_cache_page \ar \as dhwb XCHAL_DCACHE_LINEWIDTH
++      __loop_cache_page \ar \as dhwb XCHAL_DCACHE_LINEWIDTH 1020
+ #endif
+       .endm
+@@ -184,7 +199,7 @@
+       .macro  ___invalidate_dcache_page ar as
+ #if XCHAL_DCACHE_SIZE
+-      __loop_cache_page \ar \as dhi XCHAL_DCACHE_LINEWIDTH
++      __loop_cache_page \ar \as dhi XCHAL_DCACHE_LINEWIDTH 1020
+ #endif
+       .endm
+@@ -193,7 +208,7 @@
+       .macro  ___invalidate_icache_page ar as
+ #if XCHAL_ICACHE_SIZE
+-      __loop_cache_page \ar \as ihi XCHAL_ICACHE_LINEWIDTH
++      __loop_cache_page \ar \as ihi XCHAL_ICACHE_LINEWIDTH 1020
+ #endif
+       .endm