|
[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 Mon, Feb 22, 2021 at 04:55:03PM +0100, Jan Beulich wrote:
> On 22.02.2021 16:31, Roger Pau Monné wrote:
> > 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>
>
> Thanks.
>
> > 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?)
>
> I'd rather undo the change to the prototype, or else further
> changes would be needed for consistency. I'll take it that
> you're fine either way, and hence your ack stands.
Yes, that's also fine as long as it's consistent.
Roger.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |