Skip to content

Commit 025db34

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 <gerry@linux.alibaba.com>
1 parent c51e6e1 commit 025db34

File tree

4 files changed

+4
-3
lines changed

4 files changed

+4
-3
lines changed

coverage_config_x86_64.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"coverage_score": 74.7,
2+
"coverage_score": 74.8,
33
"exclude_path": "",
44
"crate_features": ""
55
}

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)