Re: [PATCH v2 07/13] mshv: default to safe partition CPU features

[email protected] Mon, 10 Aug 2026 12:57:22 +0000
Newsgroups org.kernel.vger.linux-hyperv
Message-ID <[email protected]>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Legacy V1 API callers requesting nested virtualization will no longer receive the nested virtualization CPU feature, breaking ABI compatibility.
--

--- Patch [7]: [PATCH v2 07/13] mshv: default to safe partition CPU features ---
commit 01e208d51ef280f67802036c435ff766571437ae
Author: Wei Liu <[email protected]>

mshv: default to safe partition CPU features

For legacy create-partition callers, disable all processor and xsave
features first, then enable only the default feature set known to be
supported. Passing an all-zero disabled feature mask can make SEV-SNP
partition creation fail on Hyper-V.

> diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c
> index 712f45dcef60c..ad2e708fd7539 100644
> --- a/drivers/hv/mshv_root_main.c
> +++ b/drivers/hv/mshv_root_main.c
> @@ -2373,15 +2373,102 @@ static long mshv_ioctl_process_pt_flags(void __user *user_arg, u64 *pt_flags,
>  	    args.pt_isolation >= MSHV_PT_ISOLATION_COUNT)
>  		return -EINVAL;
>  
> +	memset(cr_props, 0, sizeof(*cr_props));
> +	memset(isol_props, 0, sizeof(*isol_props));
>  	disabled_procs = &cr_props->disabled_processor_features;
>  	disabled_xsave = &cr_props->disabled_processor_xsave_features;
>  
> +#if IS_ENABLED(CONFIG_X86_64)
> +	/* Disable all processor features first. */
> +	for (i = 0; i < HV_PARTITION_PROCESSOR_FEATURES_BANKS; i++)
> +		disabled_procs->as_uint64[i] = U64_MAX;
> +
> +	/* Enable default features that are known to be supported. */
> +	disabled_procs->sse3_support = 0;

[ ... ]

> +	disabled_procs->cet_ss_support = 0;
> +	disabled_procs->cet_ibt_support = 0;
> +	disabled_procs->vmx_exception_inject_support = 0;

[Severity: High]
Does this omission break legacy callers requesting nested virtualization?

Since all features are disabled by default (U64_MAX), and
disabled_procs->nested_virt_support is not explicitly set to 0 in this
default list, won't nested virtualization remain disabled for the guest CPU
even if the legacy caller sets MSHV_PT_BIT_NESTED_VIRTUALIZATION?

Later in mshv_ioctl_process_pt_flags(), the creation capability is enabled
if requested:

    if (args.pt_flags & BIT(MSHV_PT_BIT_NESTED_VIRTUALIZATION))
            *pt_flags |= HV_PARTITION_CREATION_FLAG_NESTED_VIRTUALIZATION_CAPABLE;

However, because the CPU feature itself is left disabled by the new safe
defaults list, it appears this will break nested virtualization for V1 ABI
callers.

> +
> +	disabled_xsave->as_uint64 = U64_MAX;
> +	disabled_xsave->xsave_support = 0;
> +	disabled_xsave->xsaveopt_support = 0;
> +	disabled_xsave->avx_support = 0;
> +#endif

-- 
Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=7