From 8687fe3786727f4321909d6be36a28752259fb22 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Sat, 4 Jul 2020 18:20:49 -0700 Subject: [PATCH] [boot] Zero extra memory in loaded sections When loading ELF headers (as opposed to sections), the `file_size` of the data may be smaller than the `mem_size` of the section to be loaded in memory. Don't blindly copy `mem_size` bytes from the ELF file, but instead only `file_size`, then zero the rest. Tags: elf loader --- src/boot/loader.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/boot/loader.cpp b/src/boot/loader.cpp index edd27ce..fc859b3 100644 --- a/src/boot/loader.cpp +++ b/src/boot/loader.cpp @@ -57,7 +57,13 @@ load( L"Failed allocating space for kernel code"); void *data_start = offset_ptr(data, pheader->offset); - bs->copy_mem(pages, data_start, pheader->mem_size); + bs->copy_mem(pages, data_start, pheader->file_size); + + if (pheader->mem_size > pheader->file_size) { + void *extra = offset_ptr(pages, pheader->file_size); + size_t size = pheader->mem_size - pheader->file_size; + bs->set_mem(extra, size, 0); + } console::print(L" section %d phys: 0x%lx\r\n", i, pages); console::print(L" section %d virt: 0x%lx\r\n", i, pheader->vaddr);