Patch "x86/pvh: Call C code via the kernel virtual mapping" has been added to the 5.10-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    x86/pvh: Call C code via the kernel virtual mapping

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     x86-pvh-call-c-code-via-the-kernel-virtual-mapping.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 981a05a2e3d15cf30f556fa08c217a6c8f0eda22
Author: Ard Biesheuvel <ardb@xxxxxxxxxx>
Date:   Wed Oct 9 18:04:40 2024 +0200

    x86/pvh: Call C code via the kernel virtual mapping
    
    [ Upstream commit e8fbc0d9cab6c1ee6403f42c0991b0c1d5dbc092 ]
    
    Calling C code via a different mapping than it was linked at is
    problematic, because the compiler assumes that RIP-relative and absolute
    symbol references are interchangeable. GCC in particular may use
    RIP-relative per-CPU variable references even when not using -fpic.
    
    So call xen_prepare_pvh() via its kernel virtual mapping on x86_64, so
    that those RIP-relative references produce the correct values. This
    matches the pre-existing behavior for i386, which also invokes
    xen_prepare_pvh() via the kernel virtual mapping before invoking
    startup_32 with paging disabled again.
    
    Fixes: 7243b93345f7 ("xen/pvh: Bootstrap PVH guest")
    Tested-by: Jason Andryuk <jason.andryuk@xxxxxxx>
    Reviewed-by: Jason Andryuk <jason.andryuk@xxxxxxx>
    Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
    Message-ID: <20241009160438.3884381-8-ardb+git@xxxxxxxxxx>
    Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/x86/platform/pvh/head.S b/arch/x86/platform/pvh/head.S
index cfabc3340362b..eadadd2ecd847 100644
--- a/arch/x86/platform/pvh/head.S
+++ b/arch/x86/platform/pvh/head.S
@@ -106,7 +106,14 @@ SYM_CODE_START_LOCAL(pvh_start_xen)
 	movq %rbp, %rbx
 	subq $_pa(pvh_start_xen), %rbx
 	movq %rbx, phys_base(%rip)
-	call xen_prepare_pvh
+
+	/* Call xen_prepare_pvh() via the kernel virtual mapping */
+	leaq xen_prepare_pvh(%rip), %rax
+	subq phys_base(%rip), %rax
+	addq $__START_KERNEL_map, %rax
+	ANNOTATE_RETPOLINE_SAFE
+	call *%rax
+
 	/*
 	 * Clear phys_base.  __startup_64 will *add* to its value,
 	 * so reset to 0.




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux