浏览代码

Fix write to mmap-min-addr

4lDO2 2 年之前
父节点
当前提交
13cbac293b
共有 1 个文件被更改,包括 4 次插入2 次删除
  1. 4 2
      src/platform/redox/redox-exec/src/lib.rs

+ 4 - 2
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")?);