[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/3] x86/pvh: Fixes to convert_pvh_info()
>>> On 29.01.19 at 21:43, <andrew.cooper3@xxxxxxxxxx> wrote: > On 23/01/2019 11:35, Jan Beulich wrote: >>>>> On 21.01.19 at 16:37, <andrew.cooper3@xxxxxxxxxx> wrote: >>> --- a/xen/arch/x86/guest/pvh-boot.c >>> +++ b/xen/arch/x86/guest/pvh-boot.c >>> @@ -38,12 +38,20 @@ static const char *__initdata pvh_loader = "PVH > Directboot"; >>> static void __init convert_pvh_info(multiboot_info_t **mbi, >>> module_t **mod) >>> { >>> - const struct hvm_start_info *pvh_info = __va(pvh_start_info_pa); >>> + struct hvm_start_info *pvh_info = __va(pvh_start_info_pa); >>> const struct hvm_modlist_entry *entry; >>> unsigned int i; >>> >>> if ( pvh_info->magic != XEN_HVM_START_MAGIC_VALUE ) >>> - panic("Magic value is wrong: %x\n", pvh_info->magic); >>> + panic("PVH magic value is wrong: %x\n", pvh_info->magic); >>> + >>> + /* Check consistency between the modlist and number of modules. */ >>> + if ( (pvh_info->modlist_paddr == 0) != (pvh_info->nr_modules == 0) ) >>> + { >>> + printk("PVH module mismatch: pa %08"PRIx64", nr %u - Ignoring\n", >>> + pvh_info->modlist_paddr, pvh_info->nr_modules); >>> + pvh_info->modlist_paddr = pvh_info->nr_modules = 0; >>> + } >> While we don't consume memmap_{paddr,entries} (yet), wouldn't >> it make sense to also check those for similar consistency? > > Plausibly, but as you note, its not like we use any of that yet. Also, > it needs an ABI version check, so I'm not going to complicated this > patch with speculative work. Okay. >> Furthermore I'm not convinced the check above is correct: I don't >> see anything wrong with a random modlist_paddr as long as >> nr_modules is zero. > > The problem case is the opposite way around - when nr_modules is nonzero > and paddr is 0. > > Several of the loops in Xen will really go wrong if then encounter such > a malformed entry. Right. My comment was to ask that you relax the check accordingly; I'm not sure whether to interpret your reply that way ... >> In particular it is not uncommon for placement >> implementations to assign the next sequential address to the next >> item to process before looking at or iterating over the number of >> associated entries. > > I'd put that firmly in the class of "buggy firmware". Leaving dangling > pointers is never a good idea, even if it isn't strictly speaking in > violation of the protocol in question. ... while this actually makes it sound as if you'd rather want to keep the too strict check. It's a matter of taste to some degree - to me, a pointer to an array isn't "dangling" when the array size is known to be zero. For debugging purposes one may even put in a non- canonical pointer instead of a NULL one in such cases. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |