[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 5/8] x86/gdbsx: convert "user" to "guest" accesses


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Mon, 22 Feb 2021 16:31:06 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CE81KYBr9pPb/QK34EJoVBbaFPK/qNZDDnc8VpPlONE=; b=RO70A+axRiDNXod4IgIDjKnuHnizXHcxoR0RZWtgVswLdY7L7beWL5YcJQ2l5vR+Lv+6DkoAJG4AlAngJGW/Vp/Wd07CWalJoZ4z24NUGmSgTEE8L37Z3yFqF4q9Nr4Q50OWXehNX82IqKlKM6ARtsGHZuqrKOnNFOy4BUa0ewtYN6fRv2Sgh69yHknZn4+XP6Y7hqbVmvkXiCTIBkHvgF1Qo+i7mfW184tWFUq9n9+TelORbw4UkjXUfB9v55akRVQ0vqSQuY96Vd4ur7TUqKDVkEr865d4imJjvZ07oaKvtboqq3rqXErAHzMLwAxn5Or7qrTJJaF+AtvPzN5OpA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XppEhxEoK8z38hk7j0Gk97fsKAaDRrufy4ZVN1/ceQsKM3j+667VHj7rNXCVtYRoLmCMcx1euTBS3QTHblbkXcK9ss5TTLtIT2CCgFq3LFJOX2Oj2uV+OkdXhfD490BEOsTu6NFNuRNdZlrwCPLW4vfmJHVP9HvoVxqCxWMB/W/S/aWuyqTLGuHh2a8Gkz+PxfFLoLHYeFztnbxhHMtNafcrtJWoE0S9CQgEtPpYOva78/Xe2PicycSpju6X21fOJR5+D05Ws+0Ac/mC8BdePKiEk9Jl/71yqIdRkkgan1sop6i9qO1qGyV41fa/lrtgN74Rls1uwPR05ptOEN9pYA==
  • Authentication-results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Ian Jackson <iwj@xxxxxxxxxxxxxx>
  • Delivery-date: Mon, 22 Feb 2021 15:31:50 +0000
  • Ironport-sdr: 03OHuxaI4UH063STll9d+eBDUBVjEhmUxcOs65iSDXOeBIKLD6STxs326wwVrq5OCSw9IcO82k 3qRDRGzIqpW5gKov88CMSSfh1fsds5TQ7VtkwzgtzFNolRq1QCwlcV2gURb16d9/3TIDykk6Fn iqy7nXHxJUE/Z5Bs/e3GAl4vRg0TY6gA1Em+bXwE5bytziKbOTN9cG/ma6mBdmzGePmBSnrj50 QfB/noQUOwQ+EQ5NfygrHe+GPaVvu1KmFRExkpA/mGudAgUk+dsk6wq9yQ4jZwNTZA8Qv9AzHN 56A=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

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.



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.