]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: arm64: Set a Linux errno on SMCCC error in kvm_call_hyp_nvhe()
authorVincent Donnefort <vdonnefort@google.com>
Wed, 3 Jun 2026 11:03:12 +0000 (12:03 +0100)
committerMarc Zyngier <maz@kernel.org>
Sun, 7 Jun 2026 13:58:00 +0000 (14:58 +0100)
If kvm_call_hyp_nvhe() fails with an SMCCC error code, we WARN().
However, the returned value isn't initialized and the caller might get
garbage or 0 which is likely to be interpreted as success.

Set a default -EOPNOTSUPP error value, ensuring all callers get the
message when hypercalls fail.

Signed-off-by: Vincent Donnefort <vdonnefort@google.com>
Acked-by: Will Deacon <will@kernel.org>
Reviewed-by: Fuad Tabba <tabba@google.com>
Link: https://patch.msgid.link/20260603110312.2909844-1-vdonnefort@google.com
[maz: changed error value to -EOPNOTSUPP as suggested by Will,
 tidied up change log]
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/include/asm/kvm_host.h

index 65eead8362e0b49d7ca4f36165802d2a964d1fd4..9221d7dc331e4d6aa0ae7820640ffe0bb07b8cb6 100644 (file)
@@ -1273,13 +1273,14 @@ void kvm_arm_resume_guest(struct kvm *kvm);
 #define vcpu_has_run_once(vcpu)        (!!READ_ONCE((vcpu)->pid))
 
 #ifndef __KVM_NVHE_HYPERVISOR__
-#define kvm_call_hyp_nvhe(f, ...)                                              \
+#define kvm_call_hyp_nvhe(f, ...)                                      \
        ({                                                              \
                struct arm_smccc_res res;                               \
                                                                        \
                arm_smccc_1_1_hvc(KVM_HOST_SMCCC_FUNC(f),               \
                                  ##__VA_ARGS__, &res);                 \
-               WARN_ON(res.a0 != SMCCC_RET_SUCCESS);                   \
+               if (WARN_ON(res.a0 != SMCCC_RET_SUCCESS))               \
+                       res.a1 = -EOPNOTSUPP;                           \
                                                                        \
                res.a1;                                                 \
        })