From 0da5a822b958cb567a7b4978dfb2fccb5be7ca7b Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Sun, 10 Jun 2018 10:32:51 +0200 Subject: [PATCH] fix image size calculation if app contains more than one load section --- tools/uhyve-x86_64.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/uhyve-x86_64.c b/tools/uhyve-x86_64.c index 8768f31f9..ca0c724cd 100644 --- a/tools/uhyve-x86_64.c +++ b/tools/uhyve-x86_64.c @@ -1126,8 +1126,8 @@ int load_kernel(uint8_t* mem, char* path) Elf64_Ehdr hdr; Elf64_Phdr *phdr = NULL; size_t buflen; + size_t pstart = 0; int fd, ret; - int first_load = 1; fd = open(path, O_RDONLY); if (fd == -1) @@ -1191,8 +1191,8 @@ int load_kernel(uint8_t* mem, char* path) if (!mboot) mboot = mem+paddr-GUEST_OFFSET; - if (first_load) { - first_load = 0; + if (!pstart) { + pstart = paddr; // initialize kernel *((uint64_t*) (mem+paddr-GUEST_OFFSET + 0x08)) = paddr; // physical start address @@ -1239,7 +1239,7 @@ int load_kernel(uint8_t* mem, char* path) *((uint64_t*) (mem+paddr-GUEST_OFFSET + 0xbc)) = (uint64_t)guest_mem; } - *((uint64_t*) (mem+paddr-GUEST_OFFSET + 0x38)) += memsz; // total kernel size + *((uint64_t*) (mem+pstart-GUEST_OFFSET + 0x38)) = paddr + memsz - pstart; // total kernel size } ret = 0;