]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.11-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 15 Mar 2021 12:38:57 +0000 (13:38 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 15 Mar 2021 12:38:57 +0000 (13:38 +0100)
added patches:
kvm-arm64-fix-nvhe-hyp-panic-host-context-restore.patch

queue-5.11/kvm-arm64-fix-nvhe-hyp-panic-host-context-restore.patch [new file with mode: 0644]
queue-5.11/series

diff --git a/queue-5.11/kvm-arm64-fix-nvhe-hyp-panic-host-context-restore.patch b/queue-5.11/kvm-arm64-fix-nvhe-hyp-panic-host-context-restore.patch
new file mode 100644 (file)
index 0000000..0f5d373
--- /dev/null
@@ -0,0 +1,109 @@
+From foo@baz Mon Mar 15 01:37:54 PM CET 2021
+From: Andrew Scull <ascull@google.com>
+Date: Mon, 15 Mar 2021 12:21:36 +0000
+Subject: KVM: arm64: Fix nVHE hyp panic host context restore
+To: kvmarm@lists.cs.columbia.edu
+Cc: maz@kernel.org, kernel-team@android.com, Andrew Scull <ascull@google.com>, stable@vger.kernel.org
+Message-ID: <20210315122136.1687370-1-ascull@google.com>
+
+From: Andrew Scull <ascull@google.com>
+
+Commit c4b000c3928d4f20acef79dccf3a65ae3795e0b0 upstream.
+
+When panicking from the nVHE hyp and restoring the host context, x29 is
+expected to hold a pointer to the host context. This wasn't being done
+so fix it to make sure there's a valid pointer the host context being
+used.
+
+Rather than passing a boolean indicating whether or not the host context
+should be restored, instead pass the pointer to the host context. NULL
+is passed to indicate that no context should be restored.
+
+Fixes: a2e102e20fd6 ("KVM: arm64: nVHE: Handle hyp panics")
+Cc: stable@vger.kernel.org # 5.11.y only
+Signed-off-by: Andrew Scull <ascull@google.com>
+Signed-off-by: Marc Zyngier <maz@kernel.org>
+Link: https://lore.kernel.org/r/20210219122406.1337626-1-ascull@google.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm64/include/asm/kvm_hyp.h |    3 ++-
+ arch/arm64/kvm/hyp/nvhe/host.S   |   20 ++++++++++----------
+ arch/arm64/kvm/hyp/nvhe/switch.c |    3 +--
+ 3 files changed, 13 insertions(+), 13 deletions(-)
+
+--- a/arch/arm64/include/asm/kvm_hyp.h
++++ b/arch/arm64/include/asm/kvm_hyp.h
+@@ -102,7 +102,8 @@ bool kvm_host_psci_handler(struct kvm_cp
+ void __noreturn hyp_panic(void);
+ #ifdef __KVM_NVHE_HYPERVISOR__
+-void __noreturn __hyp_do_panic(bool restore_host, u64 spsr, u64 elr, u64 par);
++void __noreturn __hyp_do_panic(struct kvm_cpu_context *host_ctxt, u64 spsr,
++                             u64 elr, u64 par);
+ #endif
+ #endif /* __ARM64_KVM_HYP_H__ */
+--- a/arch/arm64/kvm/hyp/nvhe/host.S
++++ b/arch/arm64/kvm/hyp/nvhe/host.S
+@@ -71,10 +71,15 @@ SYM_FUNC_START(__host_enter)
+ SYM_FUNC_END(__host_enter)
+ /*
+- * void __noreturn __hyp_do_panic(bool restore_host, u64 spsr, u64 elr, u64 par);
++ * void __noreturn __hyp_do_panic(struct kvm_cpu_context *host_ctxt, u64 spsr,
++ *                              u64 elr, u64 par);
+  */
+ SYM_FUNC_START(__hyp_do_panic)
+-      /* Load the format arguments into x1-7 */
++      mov     x29, x0
++
++      /* Load the format string into x0 and arguments into x1-7 */
++      ldr     x0, =__hyp_panic_string
++
+       mov     x6, x3
+       get_vcpu_ptr x7, x3
+@@ -89,13 +94,8 @@ SYM_FUNC_START(__hyp_do_panic)
+       ldr     lr, =panic
+       msr     elr_el2, lr
+-      /*
+-       * Set the panic format string and enter the host, conditionally
+-       * restoring the host context.
+-       */
+-      cmp     x0, xzr
+-      ldr     x0, =__hyp_panic_string
+-      b.eq    __host_enter_without_restoring
++      /* Enter the host, conditionally restoring the host context. */
++      cbz     x29, __host_enter_without_restoring
+       b       __host_enter_for_panic
+ SYM_FUNC_END(__hyp_do_panic)
+@@ -150,7 +150,7 @@ SYM_FUNC_END(__hyp_do_panic)
+ .macro invalid_host_el1_vect
+       .align 7
+-      mov     x0, xzr         /* restore_host = false */
++      mov     x0, xzr         /* host_ctxt = NULL */
+       mrs     x1, spsr_el2
+       mrs     x2, elr_el2
+       mrs     x3, par_el1
+--- a/arch/arm64/kvm/hyp/nvhe/switch.c
++++ b/arch/arm64/kvm/hyp/nvhe/switch.c
+@@ -266,7 +266,6 @@ void __noreturn hyp_panic(void)
+       u64 spsr = read_sysreg_el2(SYS_SPSR);
+       u64 elr = read_sysreg_el2(SYS_ELR);
+       u64 par = read_sysreg_par();
+-      bool restore_host = true;
+       struct kvm_cpu_context *host_ctxt;
+       struct kvm_vcpu *vcpu;
+@@ -280,7 +279,7 @@ void __noreturn hyp_panic(void)
+               __sysreg_restore_state_nvhe(host_ctxt);
+       }
+-      __hyp_do_panic(restore_host, spsr, elr, par);
++      __hyp_do_panic(host_ctxt, spsr, elr, par);
+       unreachable();
+ }
index 0b5a2940b30959c794e0cdce9a69a2d88b1729aa..fdc962fecc458d620f6a8afab02c61ba1901425e 100644 (file)
@@ -303,3 +303,4 @@ mm-madvise-replace-ptrace-attach-requirement-for-process_madvise.patch
 mm-memcg-set-memcg-when-splitting-page.patch
 mm-memcg-rename-mem_cgroup_split_huge_fixup-to-split_page_memcg-and-add-nr_pages-argument.patch
 mm-page_alloc.c-refactor-initialization-of-struct-page-for-holes-in-memory-layout.patch
+kvm-arm64-fix-nvhe-hyp-panic-host-context-restore.patch