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

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

diff --git a/queue-3.18/arm64-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch b/queue-3.18/arm64-kvm-fix-smccc-handling-of-unimplemented-smc-hvc-calls.patch
new file mode 100644 (file)
index 0000000..4dce68a
--- /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
+@@ -34,7 +34,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;
+       }
+@@ -43,7 +43,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 b8240b90dd42610eb8b02e31c4c23f63f63ba8d7..3b8961a17cc64e01e04f88ca155ca1ab0a051ffe 100644 (file)
@@ -15,3 +15,4 @@ phy-work-around-phys-references-to-usb-nop-xceiv-devices.patch
 arm-dts-kirkwood-fix-pin-muxing-of-mpp7-on-openblocks-a7.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