[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 5/8] x86/gdbsx: convert "user" to "guest" accesses
On Wed, Feb 17, 2021 at 09:21:36AM +0100, Jan Beulich wrote: > Using copy_{from,to}_user(), this code was assuming to be called only by > PV guests. Use copy_{from,to}_guest() instead, transforming the incoming > structure field into a guest handle (the field should really have been > one in the first place). Also do not transform the debuggee address into > a pointer. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> One minor comment below that can be taken care of when committing I think. > --- > v2: Re-base (bug fix side effect was taken care of already). > > --- a/xen/arch/x86/debug.c > +++ b/xen/arch/x86/debug.c > @@ -108,12 +108,11 @@ dbg_pv_va2mfn(dbgva_t vaddr, struct doma > } > > /* Returns: number of bytes remaining to be copied */ > -static unsigned int dbg_rw_guest_mem(struct domain *dp, void * __user gaddr, > - void * __user buf, unsigned int len, > - bool toaddr, uint64_t pgd3) > +static unsigned int dbg_rw_guest_mem(struct domain *dp, unsigned long addr, > + XEN_GUEST_HANDLE_PARAM(void) buf, > + unsigned int len, bool toaddr, > + uint64_t pgd3) > { > - unsigned long addr = (unsigned long)gaddr; > - > while ( len > 0 ) > { > char *va; > @@ -134,20 +133,18 @@ static unsigned int dbg_rw_guest_mem(str > > if ( toaddr ) > { > - copy_from_user(va, buf, pagecnt); /* va = buf */ > + copy_from_guest(va, buf, pagecnt); > paging_mark_dirty(dp, mfn); > } > else > - { > - copy_to_user(buf, va, pagecnt); /* buf = va */ > - } > + copy_to_guest(buf, va, pagecnt); > > unmap_domain_page(va); > if ( !gfn_eq(gfn, INVALID_GFN) ) > put_gfn(dp, gfn_x(gfn)); > > addr += pagecnt; > - buf += pagecnt; > + guest_handle_add_offset(buf, pagecnt); > len -= pagecnt; > } > > @@ -161,7 +158,7 @@ static unsigned int dbg_rw_guest_mem(str > * pgd3: value of init_mm.pgd[3] in guest. see above. > * Returns: number of bytes remaining to be copied. > */ > -unsigned int dbg_rw_mem(void * __user addr, void * __user buf, > +unsigned int dbg_rw_mem(unsigned long gva, XEN_GUEST_HANDLE_PARAM(void) buf, > unsigned int len, domid_t domid, bool toaddr, > uint64_t pgd3) You change the prototype below to make pgd3 unsigned long, so you should change the type here also? (and likely in dbg_rw_guest_mem?) Thanks, Roger.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |