libxc: Fix after xc_map_foreign_ranges() patch.
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 24 Jul 2008 10:18:53 +0000 (11:18 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 24 Jul 2008 10:18:53 +0000 (11:18 +0100)
Must munmap() region after loading elf image.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
tools/libxc/xc_hvm_build.c
tools/libxc/xc_linux.c

index f442a791f8df65408ae5720234e8c90725b830b4..a174b430a119722b768a08ec876a7d74b6aa0e4f 100644 (file)
@@ -126,19 +126,21 @@ static int loadelfimage(
     for ( i = 0; i < pages; i++ )
         entries[i].mfn = parray[(elf->pstart >> PAGE_SHIFT) + i];
 
-    elf->dest = xc_map_foreign_ranges(xch, dom, pages << PAGE_SHIFT,
-                       PROT_READ | PROT_WRITE, 1 << PAGE_SHIFT,
-                       entries, pages);
-    if (elf->dest == NULL)
+    elf->dest = xc_map_foreign_ranges(
+        xch, dom, pages << PAGE_SHIFT, PROT_READ | PROT_WRITE, 1 << PAGE_SHIFT,
+        entries, pages);
+    if ( elf->dest == NULL )
         goto err;
 
     /* Load the initial elf image. */
     elf_load_binary(elf);
     rc = 0;
 
+    munmap(elf->dest, pages << PAGE_SHIFT);
+    elf->dest = NULL;
+
  err:
-    if ( entries )
-        free(entries);
+    free(entries);
 
     return rc;
 }
index 6df3e9957db93d2d8d8ba06b170191193d61d785..2480b3ce7277ed2cf59c587a518b271187433f43 100644 (file)
@@ -123,16 +123,16 @@ void *xc_map_foreign_ranges(int xc_handle, uint32_t dom,
                             privcmd_mmap_entry_t entries[], int nentries)
 {
     privcmd_mmap_t ioctlx;
-
     int i, rc;
     void *addr;
 
     addr = mmap(NULL, size, prot, MAP_SHARED, xc_handle, 0);
-    if (addr == MAP_FAILED)
+    if ( addr == MAP_FAILED )
         goto mmap_failed;
 
-    for (i = 0; i < nentries; i++) {
-        entries[i].va = (uintptr_t)addr + (i * chunksize);
+    for ( i = 0; i < nentries; i++ )
+    {
+        entries[i].va = (unsigned long)addr + (i * chunksize);
         entries[i].npages = chunksize >> PAGE_SHIFT;
     }
 
@@ -141,14 +141,14 @@ void *xc_map_foreign_ranges(int xc_handle, uint32_t dom,
     ioctlx.entry = entries;
 
     rc = ioctl(xc_handle, IOCTL_PRIVCMD_MMAP, &ioctlx);
-    if (rc)
+    if ( rc )
         goto ioctl_failed;
 
     return addr;
 
 ioctl_failed:
     rc = munmap(addr, size);
-    if (rc == -1)
+    if ( rc == -1 )
         ERROR("%s: error in error path\n", __FUNCTION__);
 
 mmap_failed: