Re: [Xen-devel] [PATCH for-4.8] libxc: fix unmap of ACPI guest memory region

2016-11-10 Thread Wei Liu
On Tue, Nov 08, 2016 at 05:22:15PM +0100, Roger Pau Monne wrote:
> Commit fac7f7 changed the value of ptr so that it points to the right memory
> area, taking the page offset into account, but failed to remove this when
> doing the unmap, which caused the region to not be unmapped. Fix this by not
> modifying ptr and instead adding the page offset directly in the memcpy
> call.
> 
> Reported-by: Andrew Cooper 
> Signed-off-by: Roger Pau Monné 

Applied.

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


Re: [Xen-devel] [PATCH for-4.8] libxc: fix unmap of ACPI guest memory region

2016-11-09 Thread Andrew Cooper
On 08/11/16 16:22, Roger Pau Monne wrote:
> Commit fac7f7 changed the value of ptr so that it points to the right memory
> area, taking the page offset into account, but failed to remove this when
> doing the unmap, which caused the region to not be unmapped. Fix this by not
> modifying ptr and instead adding the page offset directly in the memcpy
> call.

Coverity-ID: 1394285

(Coverity scan has now run and found this issue, so we have a public ID
to use).

> Reported-by: Andrew Cooper 
> Signed-off-by: Roger Pau Monné 

Reviewed-by: Andrew Cooper 

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


Re: [Xen-devel] [PATCH for-4.8] libxc: fix unmap of ACPI guest memory region

2016-11-09 Thread Roger Pau Monne
On Tue, Nov 08, 2016 at 12:19:06PM -0500, Boris Ostrovsky wrote:
> 
> 
> On 11/08/2016 11:22 AM, Roger Pau Monne wrote:
> > Commit fac7f7 changed the value of ptr so that it points to the right memory
> > area, taking the page offset into account, but failed to remove this when
> > doing the unmap, which caused the region to not be unmapped. Fix this by not
> > modifying ptr and instead adding the page offset directly in the memcpy
> > call.
> > 
> > Reported-by: Andrew Cooper 
> > Signed-off-by: Roger Pau Monné 
> > ---
> > Cc: Wei Liu 
> > Cc: Andrew Cooper 
> > Cc: Boris Ostrovsky 
> > Cc: Ian Jackson 
> > ---
> >  tools/libxc/xc_dom_core.c | 7 +++
> >  1 file changed, 3 insertions(+), 4 deletions(-)
> > 
> > diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c
> > index ad819dd..36cd3c8 100644
> > --- a/tools/libxc/xc_dom_core.c
> > +++ b/tools/libxc/xc_dom_core.c
> > @@ -1119,10 +1119,9 @@ static int xc_dom_load_acpi(struct xc_dom_image *dom)
> >  goto err;
> >  }
> > 
> > -ptr = (uint8_t *)ptr +
> > -  (dom->acpi_modules[i].guest_addr_out & ~XC_PAGE_MASK);
> > -
> > -memcpy(ptr, dom->acpi_modules[i].data, 
> > dom->acpi_modules[i].length);
> > +memcpy((uint8_t *)ptr +
> > +   (dom->acpi_modules[i].guest_addr_out & ~XC_PAGE_MASK),
> > +   dom->acpi_modules[i].data, dom->acpi_modules[i].length);
> >  munmap(ptr, XC_PAGE_SIZE * num_pages);
> > 
> >  free(extents);
> > 
> 
> 
> Reviewed-by: Boris Ostrovsky 
> 
> (Although I don't think this would cause memory not to be unmapped: per
> Linux man page "All pages containing a part of the indicated range are
> unmapped ..." and ptr is offset from its original value by a fraction of a
> page.)

Linux man page states:

"The implementation shall require that addr be a multiple of the page size 
{PAGESIZE}."

And on FreeBSD:

"The munmap() system call will fail if: The addr argument was not page 
aligned, [...]"

Roger.

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


Re: [Xen-devel] [PATCH for-4.8] libxc: fix unmap of ACPI guest memory region

2016-11-08 Thread Boris Ostrovsky



On 11/08/2016 11:22 AM, Roger Pau Monne wrote:

Commit fac7f7 changed the value of ptr so that it points to the right memory
area, taking the page offset into account, but failed to remove this when
doing the unmap, which caused the region to not be unmapped. Fix this by not
modifying ptr and instead adding the page offset directly in the memcpy
call.

Reported-by: Andrew Cooper 
Signed-off-by: Roger Pau Monné 
---
Cc: Wei Liu 
Cc: Andrew Cooper 
Cc: Boris Ostrovsky 
Cc: Ian Jackson 
---
 tools/libxc/xc_dom_core.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c
index ad819dd..36cd3c8 100644
--- a/tools/libxc/xc_dom_core.c
+++ b/tools/libxc/xc_dom_core.c
@@ -1119,10 +1119,9 @@ static int xc_dom_load_acpi(struct xc_dom_image *dom)
 goto err;
 }

-ptr = (uint8_t *)ptr +
-  (dom->acpi_modules[i].guest_addr_out & ~XC_PAGE_MASK);
-
-memcpy(ptr, dom->acpi_modules[i].data, dom->acpi_modules[i].length);
+memcpy((uint8_t *)ptr +
+   (dom->acpi_modules[i].guest_addr_out & ~XC_PAGE_MASK),
+   dom->acpi_modules[i].data, dom->acpi_modules[i].length);
 munmap(ptr, XC_PAGE_SIZE * num_pages);

 free(extents);




Reviewed-by: Boris Ostrovsky 

(Although I don't think this would cause memory not to be unmapped: per 
Linux man page "All pages containing a part of the indicated range are 
unmapped ..." and ptr is offset from its original value by a fraction of 
a page.)


-boris

___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel


[Xen-devel] [PATCH for-4.8] libxc: fix unmap of ACPI guest memory region

2016-11-08 Thread Roger Pau Monne
Commit fac7f7 changed the value of ptr so that it points to the right memory
area, taking the page offset into account, but failed to remove this when
doing the unmap, which caused the region to not be unmapped. Fix this by not
modifying ptr and instead adding the page offset directly in the memcpy
call.

Reported-by: Andrew Cooper 
Signed-off-by: Roger Pau Monné 
---
Cc: Wei Liu 
Cc: Andrew Cooper 
Cc: Boris Ostrovsky 
Cc: Ian Jackson 
---
 tools/libxc/xc_dom_core.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c
index ad819dd..36cd3c8 100644
--- a/tools/libxc/xc_dom_core.c
+++ b/tools/libxc/xc_dom_core.c
@@ -1119,10 +1119,9 @@ static int xc_dom_load_acpi(struct xc_dom_image *dom)
 goto err;
 }
 
-ptr = (uint8_t *)ptr +
-  (dom->acpi_modules[i].guest_addr_out & ~XC_PAGE_MASK);
-
-memcpy(ptr, dom->acpi_modules[i].data, dom->acpi_modules[i].length);
+memcpy((uint8_t *)ptr +
+   (dom->acpi_modules[i].guest_addr_out & ~XC_PAGE_MASK),
+   dom->acpi_modules[i].data, dom->acpi_modules[i].length);
 munmap(ptr, XC_PAGE_SIZE * num_pages);
 
 free(extents);
-- 
2.7.4 (Apple Git-66)


___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel