]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 15 Nov 2021 13:25:23 +0000 (14:25 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 15 Nov 2021 13:25:23 +0000 (14:25 +0100)
added patches:
kvm-x86-move-guest_pv_has-out-of-user_access-section.patch

queue-5.15/kvm-x86-move-guest_pv_has-out-of-user_access-section.patch [new file with mode: 0644]
queue-5.15/series

diff --git a/queue-5.15/kvm-x86-move-guest_pv_has-out-of-user_access-section.patch b/queue-5.15/kvm-x86-move-guest_pv_has-out-of-user_access-section.patch
new file mode 100644 (file)
index 0000000..3811de0
--- /dev/null
@@ -0,0 +1,55 @@
+From 3e067fd8503d6205aa0c1c8f48f6b209c592d19c Mon Sep 17 00:00:00 2001
+From: Paolo Bonzini <pbonzini@redhat.com>
+Date: Fri, 12 Nov 2021 02:53:41 -0500
+Subject: KVM: x86: move guest_pv_has out of user_access section
+
+From: Paolo Bonzini <pbonzini@redhat.com>
+
+commit 3e067fd8503d6205aa0c1c8f48f6b209c592d19c upstream.
+
+When UBSAN is enabled, the code emitted for the call to guest_pv_has
+includes a call to __ubsan_handle_load_invalid_value.  objtool
+complains that this call happens with UACCESS enabled; to avoid
+the warning, pull the calls to user_access_begin into both arms
+of the "if" statement, after the check for guest_pv_has.
+
+Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
+Cc: David Woodhouse <dwmw2@infradead.org>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/x86/kvm/x86.c |    9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -3227,9 +3227,6 @@ static void record_steal_time(struct kvm
+       }
+       st = (struct kvm_steal_time __user *)ghc->hva;
+-      if (!user_access_begin(st, sizeof(*st)))
+-              return;
+-
+       /*
+        * Doing a TLB flush here, on the guest's behalf, can avoid
+        * expensive IPIs.
+@@ -3238,6 +3235,9 @@ static void record_steal_time(struct kvm
+               u8 st_preempted = 0;
+               int err = -EFAULT;
++              if (!user_access_begin(st, sizeof(*st)))
++                      return;
++
+               asm volatile("1: xchgb %0, %2\n"
+                            "xor %1, %1\n"
+                            "2:\n"
+@@ -3260,6 +3260,9 @@ static void record_steal_time(struct kvm
+               if (!user_access_begin(st, sizeof(*st)))
+                       goto dirty;
+       } else {
++              if (!user_access_begin(st, sizeof(*st)))
++                      return;
++
+               unsafe_put_user(0, &st->preempted, out);
+               vcpu->arch.st.preempted = 0;
+       }
index cc745aeb373665ce5523d9ad2a25f42ac872de61..1825bbdb3e401c8ec8e7df11a84bbfd3a0ab0edd 100644 (file)
@@ -856,3 +856,4 @@ mips-fix-assembly-error-from-mipsr2-code-used-within-mips_isa_arch_level.patch
 x86-mce-add-errata-workaround-for-skylake-skx37.patch
 pci-msi-move-non-mask-check-back-into-low-level-accessors.patch
 pci-msi-destroy-sysfs-before-freeing-entries.patch
+kvm-x86-move-guest_pv_has-out-of-user_access-section.patch