mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/domctl: restore all registers in arch_{get,set}_info_guest()
Commit9f892f84c2("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:bedbc17d84master date: 2026-07-20 11:11:37 +0200
This commit is contained in:
1 parent
7c27efebfc
commit
d5ad2233bb
2 files changed
+16
No files matched your search
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||