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

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

diff --git a/queue-4.4/arm64-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch b/queue-4.4/arm64-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch
new file mode 100644 (file)
index 0000000..7f8a21c
--- /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
+@@ -42,7 +42,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;
+       }
+@@ -51,7 +51,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 01ac6e228c5f76122cedb8dce1f44311012e4c87..4ff8758cf9eb4736c7cfff18dad6e833d267db62 100644 (file)
@@ -42,3 +42,4 @@ can-peak-fix-potential-bug-in-packet-fragmentation.patch
 libata-apply-max_sec_1024-to-all-liteon-ep1-series-devices.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