diff --git a/src/platform/redox/redox-exec/src/lib.rs b/src/platform/redox/redox-exec/src/lib.rs index 658f524bba..a736c6016d 100644 --- a/src/platform/redox/redox-exec/src/lib.rs +++ b/src/platform/redox/redox-exec/src/lib.rs @@ -228,8 +228,10 @@ where let _ = syscall::write(*name_fd, interp_override.as_ref().map_or(path, |o| &o.name)); } if interp_override.is_some() { - let mmap_min_fd = FdGuard::new(syscall::dup(*open_via_dup, b"mmap-min-addr")?); - let _ = syscall::write(*mmap_min_fd, &usize::to_ne_bytes(tree.iter().rev().nth(1).map_or(0, |(off, len)| *off + *len))); + let mmap_min_fd = FdGuard::new(syscall::dup(*grants_fd, b"mmap-min-addr")?); + let last_addr = tree.iter().rev().nth(1).map_or(0, |(off, len)| *off + *len); + let aligned_last_addr = (last_addr + PAGE_SIZE - 1) / PAGE_SIZE * PAGE_SIZE; + let _ = syscall::write(*mmap_min_fd, &usize::to_ne_bytes(aligned_last_addr)); } let addrspace_selection_fd = FdGuard::new(syscall::dup(*open_via_dup, b"current-addrspace")?);