[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] xen: fix XEN_DOMCTL_gdbsx_guestmemio crash
On 19.04.2022 12:18, Juergen Gross wrote: > A hypervisor built without CONFIG_GDBSX will crash in case the > XEN_DOMCTL_gdbsx_guestmemio domctl is being called, as the call will > end up in iommu_do_domctl() with d == NULL: > > (XEN) CPU: 6 > (XEN) RIP: e008:[<ffff82d040269984>] iommu_do_domctl+0x4/0x30 > (XEN) RFLAGS: 0000000000010202 CONTEXT: hypervisor (d0v0) > (XEN) rax: 00000000000003e8 rbx: ffff830856277ef8 rcx: ffff830856277fff > ... > (XEN) Xen call trace: > (XEN) [<ffff82d040269984>] R iommu_do_domctl+0x4/0x30 > (XEN) [<ffff82d04035cd5f>] S arch_do_domctl+0x7f/0x2330 > (XEN) [<ffff82d040239e46>] S do_domctl+0xe56/0x1930 > (XEN) [<ffff82d040238ff0>] S do_domctl+0/0x1930 > (XEN) [<ffff82d0402f8c59>] S pv_hypercall+0x99/0x110 > (XEN) [<ffff82d0402f5161>] S > arch/x86/pv/domain.c#_toggle_guest_pt+0x11/0x90 > (XEN) [<ffff82d040366288>] S lstar_enter+0x128/0x130 > (XEN) > (XEN) Pagetable walk from 0000000000000144: > (XEN) L4[0x000] = 0000000000000000 ffffffffffffffff > (XEN) > (XEN) **************************************** > (XEN) Panic on CPU 6: > (XEN) FATAL PAGE FAULT > (XEN) [error_code=0000] > (XEN) Faulting linear address: 0000000000000144 > > Fix this issue by modifying the interface of gdbsx_guest_mem_io() to > take the already known domain pointer instead of the domid. > > Reported-by: Cheyenne Wills <cheyenne.wills@xxxxxxxxx> > Fixes: e726a82ca0dc ("xen: make gdbsx support configurable") > Suggested-by: Jan Beulich <jbeulich@xxxxxxxx> > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> with one nit (which can be taken care of while committing): > --- a/xen/arch/x86/debug.c > +++ b/xen/arch/x86/debug.c > @@ -159,17 +159,11 @@ static unsigned int dbg_rw_guest_mem(struct domain *dp, > unsigned long addr, > * Returns: number of bytes remaining to be copied. > */ > unsigned int dbg_rw_mem(unsigned long gva, XEN_GUEST_HANDLE_PARAM(void) buf, > - unsigned int len, domid_t domid, bool toaddr, > + unsigned int len, struct domain *d, bool toaddr, > uint64_t pgd3) > { > - struct domain *d = rcu_lock_domain_by_id(domid); > - > - if ( d ) > - { > - if ( !d->is_dying ) > + if ( d && !d->is_dying ) > len = dbg_rw_guest_mem(d, gva, buf, len, toaddr, pgd3); This line now wants its indentation adjusted. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |