Juergen Gross 28b2cf
Patch-mainline: v5.19-rc8
Juergen Gross 28b2cf
Git-commit: cf5029d5dd7cb0aaa53250fa9e389abd231606b3
Juergen Gross 28b2cf
References: git-fixes
Juergen Gross 28b2cf
From: Aaron Lewis <aaronlewis@google.com>
Juergen Gross 28b2cf
Date: Thu, 14 Jul 2022 16:13:15 +0000
Juergen Gross 28b2cf
Subject: [PATCH] KVM: x86: Protect the unused bits in MSR exiting flags
Juergen Gross 28b2cf
Juergen Gross 28b2cf
The flags for KVM_CAP_X86_USER_SPACE_MSR and KVM_X86_SET_MSR_FILTER
Juergen Gross 28b2cf
have no protection for their unused bits.  Without protection, future
Juergen Gross 28b2cf
development for these features will be difficult.  Add the protection
Juergen Gross 28b2cf
needed to make it possible to extend these features in the future.
Juergen Gross 28b2cf
Juergen Gross 28b2cf
Signed-off-by: Aaron Lewis <aaronlewis@google.com>
Juergen Gross 28b2cf
Message-Id: <20220714161314.1715227-1-aaronlewis@google.com>
Juergen Gross 28b2cf
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Juergen Gross 28b2cf
Signed-off-by: Juergen Gross <jgross@suse.com>
Juergen Gross 28b2cf
---
Juergen Gross 28b2cf
 arch/x86/kvm/x86.c | 8 ++++++++
Juergen Gross 28b2cf
 1 file changed, 8 insertions(+)
Juergen Gross 28b2cf
Juergen Gross 28b2cf
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
Juergen Gross 28b2cf
index 143e37298d8a..e5fa335a4ea7 100644
Juergen Gross 28b2cf
--- a/arch/x86/kvm/x86.c
Juergen Gross 28b2cf
+++ b/arch/x86/kvm/x86.c
Juergen Gross 28b2cf
@@ -6029,6 +6029,11 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
Juergen Gross 28b2cf
 		r = 0;
Juergen Gross 28b2cf
 		break;
Juergen Gross 28b2cf
 	case KVM_CAP_X86_USER_SPACE_MSR:
Juergen Gross 28b2cf
+		r = -EINVAL;
Juergen Gross 28b2cf
+		if (cap->args[0] & ~(KVM_MSR_EXIT_REASON_INVAL |
Juergen Gross 28b2cf
+				     KVM_MSR_EXIT_REASON_UNKNOWN |
Juergen Gross 28b2cf
+				     KVM_MSR_EXIT_REASON_FILTER))
Juergen Gross 28b2cf
+			break;
Juergen Gross 28b2cf
 		kvm->arch.user_space_msr_mask = cap->args[0];
Juergen Gross 28b2cf
 		r = 0;
Juergen Gross 28b2cf
 		break;
Juergen Gross 28b2cf
@@ -6183,6 +6188,9 @@ static int kvm_vm_ioctl_set_msr_filter(struct kvm *kvm, void __user *argp)
Juergen Gross 28b2cf
 	if (copy_from_user(&filter, user_msr_filter, sizeof(filter)))
Juergen Gross 28b2cf
 		return -EFAULT;
Juergen Gross 28b2cf
 
Juergen Gross 28b2cf
+	if (filter.flags & ~KVM_MSR_FILTER_DEFAULT_DENY)
Juergen Gross 28b2cf
+		return -EINVAL;
Juergen Gross 28b2cf
+
Juergen Gross 28b2cf
 	for (i = 0; i < ARRAY_SIZE(filter.ranges); i++)
Juergen Gross 28b2cf
 		empty &= !filter.ranges[i].nmsrs;
Juergen Gross 28b2cf
 
Juergen Gross 28b2cf
-- 
Juergen Gross 28b2cf
2.35.3
Juergen Gross 28b2cf