From: Grygorii Strashko <grygorii_stras...@epam.com> The vcpu ctx initialization (arch_set_info_guest()) is depends on proper domain type (32/64bit) configuration, so check that vcpus are not initialized when toolstack issues XEN_DOMCTL_set_address_size hypercall.
Signed-off-by: Grygorii Strashko <grygorii_stras...@epam.com> --- xen/arch/arm/arm64/domctl.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/xen/arch/arm/arm64/domctl.c b/xen/arch/arm/arm64/domctl.c index 8720d126c97d..82eff26fb0d1 100644 --- a/xen/arch/arm/arm64/domctl.c +++ b/xen/arch/arm/arm64/domctl.c @@ -13,6 +13,19 @@ #include <asm/arm64/sve.h> #include <asm/cpufeature.h> +static bool vcpus_check_initialised(struct domain *d) +{ + struct vcpu *v; + + for_each_vcpu(d, v) + { + if ( v->is_initialised ) + return true; + } + + return false; +} + static long switch_mode(struct domain *d, enum domain_type type) { struct vcpu *v; @@ -21,6 +34,8 @@ static long switch_mode(struct domain *d, enum domain_type type) return -EINVAL; if ( domain_tot_pages(d) != 0 ) return -EBUSY; + if ( vcpus_check_initialised(d) ) + return -EBUSY; if ( d->arch.type == type ) return 0; -- 2.34.1