Skip to content

Commit 59d5c1e

Browse files
committed
KVM: TDX: Add tdx_get_cmd() helper to get and validate sub-ioctl command
Add a helper to copy a kvm_tdx_cmd structure from userspace and verify that must-be-zero fields are indeed zero. No functional change intended. Reviewed-by: Rick Edgecombe <rick.p.edgecombe@intel.com> Reviewed-by: Kai Huang <kai.huang@intel.com> Reviewed-by: Binbin Wu <binbin.wu@linux.intel.com> Reviewed-by: Yan Zhao <yan.y.zhao@intel.com> Tested-by: Yan Zhao <yan.y.zhao@intel.com> Tested-by: Kai Huang <kai.huang@intel.com> Link: https://patch.msgid.link/20251030200951.3402865-23-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent 3d626ce commit 59d5c1e

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

arch/x86/kvm/vmx/tdx.c

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2792,21 +2792,30 @@ static int tdx_td_finalize(struct kvm *kvm, struct kvm_tdx_cmd *cmd)
27922792
return 0;
27932793
}
27942794

2795-
int tdx_vm_ioctl(struct kvm *kvm, void __user *argp)
2795+
static int tdx_get_cmd(void __user *argp, struct kvm_tdx_cmd *cmd)
27962796
{
2797-
struct kvm_tdx_cmd tdx_cmd;
2798-
int r;
2799-
2800-
if (copy_from_user(&tdx_cmd, argp, sizeof(struct kvm_tdx_cmd)))
2797+
if (copy_from_user(cmd, argp, sizeof(*cmd)))
28012798
return -EFAULT;
28022799

28032800
/*
2804-
* Userspace should never set hw_error. It is used to fill
2805-
* hardware-defined error by the kernel.
2801+
* Userspace should never set hw_error. KVM writes hw_error to report
2802+
* hardware-defined error back to userspace.
28062803
*/
2807-
if (tdx_cmd.hw_error)
2804+
if (cmd->hw_error)
28082805
return -EINVAL;
28092806

2807+
return 0;
2808+
}
2809+
2810+
int tdx_vm_ioctl(struct kvm *kvm, void __user *argp)
2811+
{
2812+
struct kvm_tdx_cmd tdx_cmd;
2813+
int r;
2814+
2815+
r = tdx_get_cmd(argp, &tdx_cmd);
2816+
if (r)
2817+
return r;
2818+
28102819
mutex_lock(&kvm->lock);
28112820

28122821
switch (tdx_cmd.id) {
@@ -3181,11 +3190,9 @@ int tdx_vcpu_ioctl(struct kvm_vcpu *vcpu, void __user *argp)
31813190
if (!is_hkid_assigned(kvm_tdx) || kvm_tdx->state == TD_STATE_RUNNABLE)
31823191
return -EINVAL;
31833192

3184-
if (copy_from_user(&cmd, argp, sizeof(cmd)))
3185-
return -EFAULT;
3186-
3187-
if (cmd.hw_error)
3188-
return -EINVAL;
3193+
ret = tdx_get_cmd(argp, &cmd);
3194+
if (ret)
3195+
return ret;
31893196

31903197
switch (cmd.id) {
31913198
case KVM_TDX_INIT_VCPU:

0 commit comments

Comments
 (0)