mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/pvh: place the trampoline at page 0x1
Since PVH guest jump straight into trampoline_setup trampoline_phys is not initialized, thus the trampoline is relocated to address 0. This works, but has the undesirable effect of having VA 0 mapped to MFN 0, which means NULL pointed dereferences no longer trigger a page fault. In order to solve this, place the trampoline at page 0x1 and reserve the memory used by it. Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
1 parent
79f797c3f4
commit
fa23f2aaa2
2 files changed
+10
-2
No files matched your search
@@ -411,6 +411,9 @@ __pvh_start:
|
||||
/* Skip bootloader setup and bios setup, go straight to trampoline */
|
||||
movb $1, sym_esi(pvh_boot)
|
||||
movb $1, sym_esi(skip_realmode)
|
||||
|
||||
/* Set trampoline_phys to use mfn 1 to avoid having a mapping at VA 0 */
|
||||
movw $0x1000, sym_esi(trampoline_phys)
|
||||
jmp trampoline_setup
|
||||
|
||||
#endif /* CONFIG_PVH_GUEST */
|
||||
|
||||
+7
-2
@@ -292,9 +292,14 @@ void __init arch_init_memory(void)
|
||||
/*
|
||||
* First 1MB of RAM is historically marked as I/O. If we booted PVH,
|
||||
* reclaim the space. Irrespective, leave MFN 0 as special for the sake
|
||||
* of 0 being a very common default value.
|
||||
* of 0 being a very common default value. Also reserve page 0x1 which is
|
||||
* used by the trampoline code on PVH.
|
||||
*/
|
||||
for ( i = 0; i < (pvh_boot ? 1 : 0x100); i++ )
|
||||
BUG_ON(pvh_boot && trampoline_phys != 0x1000);
|
||||
for ( i = 0;
|
||||
i < (pvh_boot ? (1 + PFN_UP(trampoline_end - trampoline_start))
|
||||
: 0x100);
|
||||
i++ )
|
||||
share_xen_page_with_guest(mfn_to_page(_mfn(i)),
|
||||
dom_io, XENSHARE_writable);
|
||||
|
||||
|
||||