|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 14/14] x86/PVH: check Dom0 start_info for truncation; adjust entrypoint type
While for start_info we now (supposedly) guarantee that it lives below
4Gb, check it nevertheless to play/stay safe.
For the entrypoint address the situation is different: libelf already
hands us a 32-bit quantity; if there was truncation there, it would be
inside libelf (when extracting the value from the ELF notes). Reflect
the 32-bit-ness in types used.
Requested-by: Roger Pau Monné <roger@xxxxxxxxxxxxxx>
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---
v2: New.
--- a/xen/arch/x86/hvm/dom0_build.c
+++ b/xen/arch/x86/hvm/dom0_build.c
@@ -798,7 +798,7 @@ static bool __init check_and_adjust_load
static int __init pvh_place_kernel(
const struct boot_domain *bd,
struct elf_binary *elf,
- paddr_t *entry)
+ uint32_t *entry)
{
struct domain *d = bd->d;
struct boot_module *image = bd->kernel;
@@ -1097,7 +1097,7 @@ static int __init pvh_load_kernel(
return 0;
}
-static int __init pvh_setup_cpus(struct domain *d, paddr_t entry,
+static int __init pvh_setup_cpus(struct domain *d, uint32_t entry,
paddr_t start_info)
{
struct vcpu *v = d->vcpu[0];
@@ -1123,6 +1123,13 @@ static int __init pvh_setup_cpus(struct
.cpu_regs.x86_32.tr_ar = 0x8b,
};
+ if ( cpu_ctx.cpu_regs.x86_32.ebx != start_info )
+ {
+ printk("%pd: start-info address truncation: %p)\n",
+ d, _p(start_info));
+ return -ERANGE;
+ }
+
sched_setup_dom0_vcpus(d);
rc = arch_set_info_hvm_guest(v, &cpu_ctx);
@@ -1640,7 +1647,7 @@ static void __init pvh_setup_mmcfg(struc
int __init dom0_construct_pvh(const struct boot_domain *bd)
{
- paddr_t entry, start_info;
+ uint32_t entry;
struct domain *d = bd->d;
struct elf_binary elf;
struct e820entry *orig_e820;
@@ -1649,7 +1656,7 @@ int __init dom0_construct_pvh(const stru
struct acpi_info acpi = {};
struct vmx_info vmx = {};
struct hvm_modlist_entry initrd = {};
- paddr_t blob_start, blob_end;
+ paddr_t start_info, blob_start, blob_end;
int rc;
printk(XENLOG_INFO "*** Building a PVH Dom%d ***\n", d->domain_id);
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |