Skip to content

Commit 1a0fecb

Browse files
committed
Do not assume program header is sorted by VA
Do not assume program header is sorted ascendantly by virtual address, otherwise loader_result.kernel_end may be wrong. Signed-off-by: Liu Jiang <[email protected]>
1 parent c51e6e1 commit 1a0fecb

File tree

3 files changed

+3
-2
lines changed

3 files changed

+3
-2
lines changed

src/loader/x86_64/elf/mod.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -236,10 +236,11 @@ impl KernelLoader for Elf {
236236
.read_exact_from(mem_offset, kernel_image, phdr.p_filesz as usize)
237237
.map_err(|_| Error::ReadKernelImage)?;
238238

239-
loader_result.kernel_end = mem_offset
239+
let kernel_end = mem_offset
240240
.raw_value()
241241
.checked_add(phdr.p_memsz as GuestUsize)
242242
.ok_or(KernelLoaderError::MemoryOverflow)?;
243+
loader_result.kernel_end = std::cmp::max(loader_result.kernel_end, kernel_end);
243244
}
244245

245246
// elf image has no setup_header which is defined for bzImage
@@ -291,7 +292,7 @@ where
291292
kernel_image
292293
.read_exact(&mut buf)
293294
.map_err(|_| Error::ReadNoteHeader)?;
294-
if buf == [b'x', b'e', b'n', b'\0'] {
295+
if buf == [b'X', b'e', b'n', b'\0'] {
295296
break;
296297
}
297298
}

src/loader/x86_64/elf/test_badnote.bin

100755100644
-8 Bytes
Binary file not shown.

src/loader/x86_64/elf/test_elfnote.bin

100755100644
-8 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)