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

Re: [PATCH] x86/domctl: restore all registers in arch_{get,set}_info_guest()


  • To: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
  • From: Frediano Ziglio <freddy77@xxxxxxxxx>
  • Date: Mon, 20 Jul 2026 10:57:33 +0100
  • Arc-authentication-results: i=1; mx.google.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=o9wv+vt0kf3eYShVpVbOtz1n6i3oPEqytW0Oh8ZxUN4=; fh=cnTo6Tg69lXnwSXiPguVimOwedesAXdkped6OqKsO8k=; b=AYzcK+Yo95NF1D3Y+XqqcWwNUs53zePmKOus1VaZswFLej5uC3CFNG2Rb7UCq6OeCB VaIHR+u2SboDTynQr4wL+b7yW5J5zav/1SRHYvouXSoYA7txrte4vgaOfdHB3Sof2Zfy FDGV5qS3diHzdPYI3qna/kfwk638ru5ICV6Jp6fNpy7b6Gt/xDPHDg2t8sqXjzVepfRc XQ112asH9esspnEaud2LjIiUFBs/8j9OkJDx90B6sz8kvSWZgRZy3QujjQP9frNsrmWL UF5iTZPUatKISCYxbN6taTcHsN7QSSFt0D1axYQK2FSGXnkEbyU845mo2LMHUeG6QcOI hXcA==; darn=lists.xenproject.org
  • Arc-seal: i=1; a=rsa-sha256; t=1784541464; cv=none; d=google.com; s=arc-20260327; b=QBEq9KI0mdYctJi1ZNllxni4XhSjhqtYH+QLUjRKdpV823mWNNbaT4WItrqn6/8wMj MdPNbtgMN5DIQ1KDRnNE0XvH/As47f+ZdVAC7qVvEi8o3K9EJEiQwIw7ahpDG9/U2Sut ZpwX2lrlh+KFQuAECU4BU399OArOaTy/0XiUzJuNSV+4MAkLVbNklA41yQ3qRAzZf+ux 7oF2+P7Fw5JKmMFKwHIhRNuxL7s5HyIma4A2LSPc8lcVOHJz/K5JlSOcvCxsq6i7r2eR EUpreypvImmLLzIPluYBVu+KUzVbmXB/x6FbhFJX/24IxkTkEJKzOd8uAeK9ABQuC9B+ eHoQ==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References:MIME-Version"
  • Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Teddy Astie <teddy.astie@xxxxxxxxxx>
  • Delivery-date: Mon, 20 Jul 2026 09:57:49 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Mon, 20 Jul 2026 at 01:13, Marek Marczykowski-Górecki
<marmarek@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Commit 9f892f84c279 ("x86/domctl: Stop using XLAT_cpu_user_regs()")
> converted memcpy() of the cpu_user_regs structure to explicit copy of
> its fields. In the compat case, it intentionally missed few of them,
> named in the commit message. But the 64bit case missed also r8-r15
> registers, which was not intentional. This, at least, caused Linux
> 6.18.x crash when resuming PVH domU.
>
> Fix it by adding missing assignments.
>
> Fixes: 9f892f84c279 ("x86/domctl: Stop using XLAT_cpu_user_regs()")
> Signed-off-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
> ---
>  xen/arch/x86/domain.c | 8 ++++++++
>  xen/arch/x86/domctl.c | 8 ++++++++
>  2 files changed, 16 insertions(+)
>
> diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
> index 1d458f1372e5..ba7244ccc513 100644
> --- a/xen/arch/x86/domain.c
> +++ b/xen/arch/x86/domain.c
> @@ -1255,6 +1255,14 @@ int arch_set_info_guest(
>
>      if ( !compat )
>      {
> +        v->arch.user_regs.r15               = c.nat->user_regs.r15;
> +        v->arch.user_regs.r14               = c.nat->user_regs.r14;
> +        v->arch.user_regs.r13               = c.nat->user_regs.r13;
> +        v->arch.user_regs.r12               = c.nat->user_regs.r12;
> +        v->arch.user_regs.r11               = c.nat->user_regs.r11;
> +        v->arch.user_regs.r10               = c.nat->user_regs.r10;
> +        v->arch.user_regs.r9                = c.nat->user_regs.r9;
> +        v->arch.user_regs.r8                = c.nat->user_regs.r8;
>          v->arch.user_regs.rbx               = c.nat->user_regs.rbx;
>          v->arch.user_regs.rcx               = c.nat->user_regs.rcx;
>          v->arch.user_regs.rdx               = c.nat->user_regs.rdx;
> diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
> index 07f712a0a40d..3ea4c650eee0 100644
> --- a/xen/arch/x86/domctl.c
> +++ b/xen/arch/x86/domctl.c
> @@ -1481,6 +1481,14 @@ void arch_get_info_guest(struct vcpu *v, 
> vcpu_guest_context_u c)
>      if ( !compat )
>      {
>          /* Backing memory is pre-zeroed. */
> +        c.nat->user_regs.r15               = v->arch.user_regs.r15;
> +        c.nat->user_regs.r14               = v->arch.user_regs.r14;
> +        c.nat->user_regs.r13               = v->arch.user_regs.r13;
> +        c.nat->user_regs.r12               = v->arch.user_regs.r12;
> +        c.nat->user_regs.r11               = v->arch.user_regs.r11;
> +        c.nat->user_regs.r10               = v->arch.user_regs.r10;
> +        c.nat->user_regs.r9                = v->arch.user_regs.r9;
> +        c.nat->user_regs.r8                = v->arch.user_regs.r8;
>          c.nat->user_regs.rbx               = v->arch.user_regs.rbx;
>          c.nat->user_regs.rcx               = v->arch.user_regs.rcx;
>          c.nat->user_regs.rdx               = v->arch.user_regs.rdx;

Reviewed-by: Frediano Ziglio <frediano.ziglio@xxxxxxxxxx>

Frediano



 


Rackspace

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