[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/pv: Fill all Xen slots in init_guest_l4_table()
>>> On 29.08.17 at 12:24, <andrew.cooper3@xxxxxxxxxx> wrote: > There is a bug when using highmem-start= where some L4 directmap slots are not > audited in alloc_l4_table(), and not overwritten by init_guest_l4_table(). > > As highmem_start is only available in debug builds of the hypervisor, this > does not constitute a security issue. > > Ensure that init_guest_l4_table() writes to all of the Xen slots. > > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> albeit ... > @@ -1604,9 +1608,19 @@ void init_guest_l4_table(l4_pgentry_t l4tab[], const > struct domain *d, > &idle_pg_table[ROOT_PAGETABLE_FIRST_XEN_SLOT], > root_pgt_pv_xen_slots * sizeof(l4_pgentry_t)); > #ifndef NDEBUG > - if ( l4e_get_intpte(split_l4e) ) > - l4tab[ROOT_PAGETABLE_FIRST_XEN_SLOT + root_pgt_pv_xen_slots] = > - split_l4e; > + if ( unlikely(root_pgt_pv_xen_slots < ROOT_PAGETABLE_PV_XEN_SLOTS) ) > + { > + l4_pgentry_t *next = &l4tab[ROOT_PAGETABLE_FIRST_XEN_SLOT + > + root_pgt_pv_xen_slots]; > + > + if ( l4e_get_intpte(split_l4e) ) > + *next++ = split_l4e; > + > + memset(next, 0, > + _p(&l4tab[ROOT_PAGETABLE_LAST_XEN_SLOT + 1]) - _p(next)); ... these disguised casts. But all alternatives I can think of make the code more difficult to read. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |