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;
}
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;
}
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: