Messages in this thread | | | Date | Tue, 15 Aug 2023 15:56:58 +0800 | Subject | Re: [PATCH v15 018/115] KVM: TDX: x86: Add ioctl to get TDX systemwide parameters | From | Xiaoyao Li <> |
| |
On 7/26/2023 6:13 AM, isaku.yamahata@intel.com wrote: ... > +static int tdx_get_capabilities(struct kvm_tdx_cmd *cmd) > +{ > + struct kvm_tdx_capabilities __user *user_caps; > + const struct tdsysinfo_struct *tdsysinfo; > + struct kvm_tdx_capabilities *caps = NULL; > + int ret;
needs to initialize ret to 0; otherwise it returns random value on success.
> + > + BUILD_BUG_ON(sizeof(struct kvm_tdx_cpuid_config) != > + sizeof(struct tdx_cpuid_config)); > + > + if (cmd->flags) > + return -EINVAL; > + > + tdsysinfo = tdx_get_sysinfo(); > + if (!tdsysinfo) > + return -EOPNOTSUPP; > + > + caps = kmalloc(sizeof(*caps), GFP_KERNEL); > + if (!caps) > + return -ENOMEM; > + > + user_caps = (void __user *)cmd->data; > + if (copy_from_user(caps, user_caps, sizeof(*caps))) { > + ret = -EFAULT; > + goto out; > + } > + > + if (caps->nr_cpuid_configs < tdsysinfo->num_cpuid_config) { > + ret = -E2BIG; > + goto out; > + } > + > + *caps = (struct kvm_tdx_capabilities) { > + .attrs_fixed0 = tdsysinfo->attributes_fixed0, > + .attrs_fixed1 = tdsysinfo->attributes_fixed1, > + .xfam_fixed0 = tdsysinfo->xfam_fixed0, > + .xfam_fixed1 = tdsysinfo->xfam_fixed1, > + .supported_gpaw = TDX_CAP_GPAW_48 | > + (kvm_get_shadow_phys_bits() >= 52 && > + cpu_has_vmx_ept_5levels()) ? TDX_CAP_GPAW_52 : 0, > + .nr_cpuid_configs = tdsysinfo->num_cpuid_config, > + .padding = 0, > + }; > + > + if (copy_to_user(user_caps, caps, sizeof(*caps))) { > + ret = -EFAULT; > + goto out; > + } > + if (copy_to_user(user_caps->cpuid_configs, &tdsysinfo->cpuid_configs, > + tdsysinfo->num_cpuid_config * > + sizeof(struct tdx_cpuid_config))) { > + ret = -EFAULT; > + } > + > +out: > + /* kfree() accepts NULL. */ > + kfree(caps); > + return ret; > +}
| |