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

Commit 9f892f84c2 ("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: 9f892f84c2 ("x86/domctl: Stop using XLAT_cpu_user_regs()")
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Teddy Astie <teddy.astie@vates.tech>
master commit: bedbc17d84
master date: 2026-07-20 11:11:37 +0200
This commit is contained in:
Marek Marczykowski-Górecki authored and Jan Beulich committed 2026-07-20 13:30:52 +02:00
1 parent 7c27efebfc
commit d5ad2233bb
2 files changed
+16

No files matched your search

+8
View File
@@ -1280,6 +1280,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;
+8
View File
@@ -1440,6 +1440,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;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.