]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 21 Jan 2018 12:34:15 +0000 (13:34 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 21 Jan 2018 12:34:15 +0000 (13:34 +0100)
added patches:
arm64-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch

queue-4.9/arm64-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch [new file with mode: 0644]
queue-4.9/series

diff --git a/queue-4.9/arm64-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch b/queue-4.9/arm64-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch
new file mode 100644 (file)
index 0000000..3ebb0b5
--- /dev/null
@@ -0,0 +1,45 @@
+From acfb3b883f6d6a4b5d27ad7fdded11f6a09ae6dd Mon Sep 17 00:00:00 2001
+From: Marc Zyngier <marc.zyngier@arm.com>
+Date: Tue, 16 Jan 2018 10:23:47 +0000
+Subject: arm64: KVM: Fix SMCCC handling of unimplemented SMC/HVC calls
+
+From: Marc Zyngier <marc.zyngier@arm.com>
+
+commit acfb3b883f6d6a4b5d27ad7fdded11f6a09ae6dd upstream.
+
+KVM doesn't follow the SMCCC when it comes to unimplemented calls,
+and inject an UNDEF instead of returning an error. Since firmware
+calls are now used for security mitigation, they are becoming more
+common, and the undef is counter productive.
+
+Instead, let's follow the SMCCC which states that -1 must be returned
+to the caller when getting an unknown function number.
+
+Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
+Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm64/kvm/handle_exit.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/arm64/kvm/handle_exit.c
++++ b/arch/arm64/kvm/handle_exit.c
+@@ -44,7 +44,7 @@ static int handle_hvc(struct kvm_vcpu *v
+       ret = kvm_psci_call(vcpu);
+       if (ret < 0) {
+-              kvm_inject_undefined(vcpu);
++              vcpu_set_reg(vcpu, 0, ~0UL);
+               return 1;
+       }
+@@ -53,7 +53,7 @@ static int handle_hvc(struct kvm_vcpu *v
+ static int handle_smc(struct kvm_vcpu *vcpu, struct kvm_run *run)
+ {
+-      kvm_inject_undefined(vcpu);
++      vcpu_set_reg(vcpu, 0, ~0UL);
+       return 1;
+ }
index 23c0d4ed5588132152786afedd5a02a87edecb1e..99486f2f5b63c7401f91fc4a9f9f72bc07a767e5 100644 (file)
@@ -36,3 +36,4 @@ libata-apply-max_sec_1024-to-all-liteon-ep1-series-devices.patch
 workqueue-avoid-hard-lockups-in-show_workqueue_state.patch
 dm-btree-fix-serious-bug-in-btree_split_beneath.patch
 dm-thin-metadata-thin_max_concurrent_locks-should-be-6.patch
+arm64-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch