lkml.org 
[lkml]   [2023]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v15 018/115] KVM: TDX: x86: Add ioctl to get TDX systemwide parameters
    From
    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;
    > +}

    \
     
     \ /
      Last update: 2023-08-15 09:58    [W:2.236 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site