From 8d899258424f121df196ef38f2d3988e59339828 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sun, 4 Jun 2017 18:34:45 -0600 Subject: [PATCH] Align ELF segments to avoid subtract overflow --- src/syscall/process.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/syscall/process.rs b/src/syscall/process.rs index d202d46..8a86ba0 100644 --- a/src/syscall/process.rs +++ b/src/syscall/process.rs @@ -593,9 +593,12 @@ pub fn exec(path: &[u8], arg_ptrs: &[[usize; 2]]) -> Result { let mut tls_option = None; for segment in elf.segments() { if segment.p_type == program_header::PT_LOAD { + let voff = segment.p_vaddr % 4096; + let vaddr = segment.p_vaddr - voff; + let mut memory = context::memory::Memory::new( - VirtualAddress::new(segment.p_vaddr as usize), - segment.p_memsz as usize, + VirtualAddress::new(vaddr as usize), + segment.p_memsz as usize + voff as usize, entry::NO_EXECUTE | entry::WRITABLE, true );