Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 9 additions & 22 deletions src/cage/src/memory/memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,7 @@ pub fn fork_vmmap(parent_cageid: u64, child_cageid: u64) {
// entry.flags,
// entry.backing,
// );
let hit = addr_st <= 0xffffe000
&& 0xffffe000 < addr_st.wrapping_add(addr_len as u32);
let hit = addr_st <= 0xffffe000 && 0xffffe000 < addr_st.wrapping_add(addr_len as u32);

if hit {
eprintln!(
Expand All @@ -140,7 +139,7 @@ pub fn fork_vmmap(parent_cageid: u64, child_cageid: u64) {
entry.backing,
);
}

let hits_target = {
const TARGET: u64 = 0xffffe000;
let start = addr_st as u64;
Expand All @@ -150,10 +149,8 @@ pub fn fork_vmmap(parent_cageid: u64, child_cageid: u64) {

if entry.flags & (MAP_SHARED as i32) != 0 {
unsafe {
let parent_value_before =
std::ptr::read_volatile(parent_st as *const u32);
let child_value_before =
std::ptr::read_volatile(child_st as *const u32);
let parent_value_before = std::ptr::read_volatile(parent_st as *const u32);
let child_value_before = std::ptr::read_volatile(child_st as *const u32);

if hits_target {
eprintln!(
Expand Down Expand Up @@ -189,10 +186,8 @@ pub fn fork_vmmap(parent_cageid: u64, child_cageid: u64) {

let errno = *libc::__errno_location();

let parent_value_after =
std::ptr::read_volatile(parent_st as *const u32);
let child_value_after =
std::ptr::read_volatile(child_st as *const u32);
let parent_value_after = std::ptr::read_volatile(parent_st as *const u32);
let child_value_after = std::ptr::read_volatile(child_st as *const u32);

if hits_target {
eprintln!(
Expand Down Expand Up @@ -242,19 +237,15 @@ pub fn fork_vmmap(parent_cageid: u64, child_cageid: u64) {
addr_len,
);
if needs_write {
let mret = libc::mprotect(
child_st as *mut libc::c_void,
addr_len,
entry.prot,
);
let mret =
libc::mprotect(child_st as *mut libc::c_void, addr_len, entry.prot);
assert_eq!(mret, 0, "failed to restore child shared mapping protection");
}
}
}
} else {
let needs_write = entry.prot & PROT_WRITE == 0;


// eprintln!("[fork_vmmap] before writable mprotect");
unsafe {
// temporarily enable write on child's memory region to write parent data
Expand Down Expand Up @@ -303,11 +294,7 @@ pub fn fork_vmmap(parent_cageid: u64, child_cageid: u64) {
// println!("[fork_vmmap] before restore mprotect");
// revert child's memory region prot
if needs_write {
let ret = libc::mprotect(
child_st as *mut libc::c_void,
addr_len,
entry.prot,
);
let ret = libc::mprotect(child_st as *mut libc::c_void, addr_len, entry.prot);
assert_eq!(ret, 0, "failed to restore child mapping protection");
}
};
Expand Down
14 changes: 8 additions & 6 deletions src/rawposix/src/fs_calls.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use cage::{
get_cage, get_shm_length, is_mmap_error, new_shm_segment, round_up_page, shmat_helper,
shmdt_helper, signal::signal::lind_send_signal, MemoryBackingType, VmmapOps, HEAP_ENTRY_INDEX,
SHM_METADATA, get_base_address,
get_base_address, get_cage, get_shm_length, is_mmap_error, new_shm_segment, round_up_page,
shmat_helper, shmdt_helper, signal::signal::lind_send_signal, MemoryBackingType, VmmapOps,
HEAP_ENTRY_INDEX, SHM_METADATA,
};
use dashmap::mapref::entry::Entry::{Occupied, Vacant};
use fdtables;
Expand Down Expand Up @@ -1110,8 +1110,7 @@ pub extern "C" fn mmap_syscall(
if range_hits_addr(useraddr, rounded_length, FUTEX_GUEST_ADDR) {
eprintln!(
"[vmmap-add-hit-ffffe000-after] cage={} ret={:?}",
cageid,
add_ret,
cageid, add_ret,
);
}
}
Expand Down Expand Up @@ -1160,7 +1159,10 @@ pub extern "C" fn mmap_inner(
let is_shared = flags & (MAP_SHARED as i32) != 0;

if vfd_arg == -1 && has_anon && has_fixed && (is_private || is_shared) {
println!("[mmap_inner] anonymous fixed mapping, returning addr={:?}", addr);
println!(
"[mmap_inner] anonymous fixed mapping, returning addr={:?}",
addr
);
return addr as usize;
}
// end
Expand Down
6 changes: 5 additions & 1 deletion src/rawposix/src/sem_calls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,11 @@ pub extern "C" fn sem_post_syscall(
loop {
let v = state.value.load(Ordering::SeqCst);
if v >= SEM_VALUE_MAX {
return syscall_error(Errno::EOVERFLOW, "sem_post", "value would exceed SEM_VALUE_MAX");
return syscall_error(
Errno::EOVERFLOW,
"sem_post",
"value would exceed SEM_VALUE_MAX",
);
}
if state
.value
Expand Down
7 changes: 3 additions & 4 deletions src/rawposix/src/syscall_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,16 @@ use super::fs_calls::{
utimensat_syscall, write_syscall, writev_syscall,
};
use super::init::RawCallFunc;
use super::sem_calls::{
sem_destroy_syscall, sem_getvalue_syscall, sem_init_syscall, sem_post_syscall,
sem_wait_syscall,
};
use super::net_calls::{
accept4_syscall, accept_syscall, bind_syscall, connect_syscall, epoll_create1_syscall,
epoll_create_syscall, epoll_ctl_syscall, epoll_wait_syscall, gethostname_syscall,
getpeername_syscall, getsockname_syscall, getsockopt_syscall, listen_syscall, poll_syscall,
ppoll_syscall, recvfrom_syscall, recvmsg_syscall, select_syscall, sendmsg_syscall,
sendto_syscall, setsockopt_syscall, shutdown_syscall, socket_syscall, socketpair_syscall,
};
use super::sem_calls::{
sem_destroy_syscall, sem_getvalue_syscall, sem_init_syscall, sem_post_syscall, sem_wait_syscall,
};
use super::sys_calls::{
exec_syscall, exit_group_syscall, exit_syscall, fork_syscall, getegid_syscall, geteuid_syscall,
getgid_syscall, getpgid_syscall, getpid_syscall, getppid_syscall, getuid_syscall, kill_syscall,
Expand Down
Loading
Loading