[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2] xen/arm64: Zero the top 32 bits of gp registers on entry...


  • To: Michal Orzel <michal.orzel@xxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Thu, 16 Dec 2021 14:50:01 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uA6tRfloT3vh9c7MuLZ1zE6HnbJN/MKTiqJ/rO3B1FU=; b=hVBTRDoY6rqwprZHByhFt3jEeHn2BAL3UL+5BZo43OoDAe7AZkxaJe+C30wqxz6YhAMYOO+PED6HbmNHeaHR+24I6iHwN34vJhUgxDG9qg4Z5a0Ey/YV+qIOPUfKcSIAmuyLgCE0WWrvjlozwGDvLuIdNMOyQwdQEp1VJ6dwniLVPi0VIGp80zyCt7qk+mS6myoN6av8vvruAkVZpdBrijG7VbqsKvZiDT/4S6xk9+mHUKlj5PeFS9E4ph5bIz7mQjP/SGMJPDp+xi9jCYDSpsnhVsH8lcaaO+chy15gBCD0B0tvMuFbbVUOCR3USt1//PJBeEp2WFmOR59PVu2hzA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kSex8uAYQhj2neENTZpduxeICUVIh8Ll31xxTFWsaeD8V/hAJq3MzT7NgLIAK3s9kJFI1xMoLpzgtaKu3fyjCK/g7MRPe2wskmRwJ9l3ADh5C29N/gi+votyPRAWfAVgmAtnTea6EvfzqzUeI3NOs7GWJ69e1MgQZkHkx915HyNmgvNHoT8/Yiu5cl/TdWFfaifVYX2gFAdGedol8FkxwLmiPwfxr25RDpChSownzr08273dIBD5I05oXmOEjdwjtIEleaGmH/IP56jnT5849yEm7a+pAwKmgyo13/E0uIogEg75fUvbxjRuggsxIXBpGWSLxLFbgph5y5jZc+/New==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Thu, 16 Dec 2021 13:50:20 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 16.12.2021 10:21, Michal Orzel wrote:
> to hypervisor when switching from AArch32 state.
> 
> According to section D1.20.2 of Arm Arm(DDI 0487A.j):
> "If the general-purpose register was accessible from AArch32 state the
> upper 32 bits either become zero, or hold the value that the same
> architectural register held before any AArch32 execution.
> The choice between these two options is IMPLEMENTATION DEFINED"
> 
> Currently Xen does not ensure that the top 32 bits are zeroed and this
> needs to be fixed. The reason why is that there are places in Xen
> where we assume that top 32bits are zero for AArch32 guests.
> If they are not, this can lead to misinterpretation of Xen regarding
> what the guest requested. For example hypercalls returning an error
> encoded in a signed long like do_sched_op, do_hmv_op, do_memory_op
> would return -ENOSYS if the command passed as the first argument was
> clobbered.
> 
> Create a macro clobber_gp_top_halves to clobber top 32 bits of gp
> registers when hyp == 0 (guest mode) and compat == 1 (AArch32 mode).
> Add a compile time check to ensure that save_x0_x1 == 1 if
> compat == 1.
> 
> Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
> ---
>  xen/arch/arm/arm64/entry.S | 29 +++++++++++++++++++++++++++++
>  1 file changed, 29 insertions(+)
> 
> diff --git a/xen/arch/arm/arm64/entry.S b/xen/arch/arm/arm64/entry.S
> index fc3811ad0a..01f32324d0 100644
> --- a/xen/arch/arm/arm64/entry.S
> +++ b/xen/arch/arm/arm64/entry.S
> @@ -102,6 +102,30 @@
>          .endif
>  
>          .endm
> +
> +/*
> + * Clobber top 32 bits of gp registers when switching from AArch32
> + */
> +        .macro clobber_gp_top_halves, compat, save_x0_x1
> +
> +        .if \compat == 1      /* AArch32 mode */
> +
> +        /*
> +         * save_x0_x1 is equal to 0 only for guest_sync (compat == 0).
> +         * Add a compile time check to avoid violating this rule.
> +         */
> +        .if \save_x0_x1 == 0
> +        .error "save_x0_x1 is 0 but compat is 1"
> +        .endif
> +
> +        .irp 
> n,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29
> +        mov w\n, w\n
> +        .endr

What about x30 (aka lr)?

For values read from elr_el2, spsr_el2, and esr_el2 I guess the
hardware takes care of the high halves getting zeroed?

Jan




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.