diff --git a/src/scheme/memory.rs b/src/scheme/memory.rs index b837f56bd50304fb4ddab16b079bbeabb4a9edb6..f9f7496fc47f90c773cfdbd6596334a77eb4c37c 100644 --- a/src/scheme/memory.rs +++ b/src/scheme/memory.rs @@ -5,7 +5,7 @@ use crate::paging::VirtualAddress; use crate::paging::entry::EntryFlags; use crate::syscall::data::{Map, StatVfs}; use crate::syscall::error::*; -use crate::syscall::flag::{ProtFlags, PROT_EXEC, PROT_READ, PROT_WRITE}; +use crate::syscall::flag::{PROT_EXEC, PROT_READ, PROT_WRITE}; use crate::syscall::scheme::Scheme; pub struct MemoryScheme; @@ -47,13 +47,13 @@ impl Scheme for MemoryScheme { let mut to_address = crate::USER_GRANT_OFFSET; let mut entry_flags = EntryFlags::PRESENT | EntryFlags::USER_ACCESSIBLE; - if map.flags & PROT_EXEC == ProtFlags::empty() { + if !map.flags.contains(PROT_EXEC) { entry_flags |= EntryFlags::NO_EXECUTE; } - if map.flags & PROT_READ != ProtFlags::empty() { + if map.flags.contains(PROT_READ) { //TODO: PROT_READ } - if map.flags & PROT_WRITE != ProtFlags::empty() { + if map.flags.contains(PROT_WRITE) { entry_flags |= EntryFlags::WRITABLE; } diff --git a/src/scheme/user.rs b/src/scheme/user.rs index 547c123db8732af0eae479213fc939e42c4dea72..91f2d6fcffee63c876e9fe71d6ef1594ac337f1e 100644 --- a/src/scheme/user.rs +++ b/src/scheme/user.rs @@ -16,7 +16,7 @@ use crate::scheme::{AtomicSchemeId, ATOMIC_SCHEMEID_INIT, SchemeId}; use crate::sync::{WaitQueue, WaitMap}; use crate::syscall::data::{Map, Packet, Stat, StatVfs, TimeSpec}; use crate::syscall::error::*; -use crate::syscall::flag::{EventFlags, EVENT_READ, O_NONBLOCK, ProtFlags, PROT_EXEC, PROT_READ, PROT_WRITE}; +use crate::syscall::flag::{EventFlags, EVENT_READ, O_NONBLOCK, MapFlags, PROT_EXEC, PROT_READ, PROT_WRITE}; use crate::syscall::number::*; use crate::syscall::scheme::Scheme; @@ -108,7 +108,7 @@ impl UserInner { UserInner::capture_inner(&self.context, buf.as_mut_ptr() as usize, buf.len(), PROT_WRITE, None) } - fn capture_inner(context_weak: &Weak<RwLock<Context>>, address: usize, size: usize, flags: ProtFlags, desc_opt: Option<FileDescriptor>) -> Result<usize> { + fn capture_inner(context_weak: &Weak<RwLock<Context>>, address: usize, size: usize, flags: MapFlags, desc_opt: Option<FileDescriptor>) -> Result<usize> { //TODO: Abstract with other grant creation if size == 0 { Ok(0) diff --git a/src/syscall/debug.rs b/src/syscall/debug.rs index 3596efbbf4a0638d3dfa98861d0321fcaf2d70b3..270453ce15d67542d799588639517eb4773643c1 100644 --- a/src/syscall/debug.rs +++ b/src/syscall/debug.rs @@ -259,7 +259,7 @@ pub fn format_call(a: usize, b: usize, c: usize, d: usize, e: usize, f: usize) - "mprotect({:#X}, {}, {:?})", b, c, - ProtFlags::from_bits(d) + MapFlags::from_bits(d) ), SYS_NANOSLEEP => format!( "nanosleep({:?}, ({}, {}))", diff --git a/src/syscall/mod.rs b/src/syscall/mod.rs index 50cacdcb628139151929ed89686a7abc25fe6ba1..de4014a0bccf6130ec6725ffd567d77b8506fe2e 100644 --- a/src/syscall/mod.rs +++ b/src/syscall/mod.rs @@ -16,7 +16,7 @@ pub use self::validate::*; use self::data::{SigAction, TimeSpec}; use self::error::{Error, Result, ENOSYS}; -use self::flag::{CloneFlags, PhysmapFlags, ProtFlags, WaitFlags}; +use self::flag::{CloneFlags, MapFlags, PhysmapFlags, WaitFlags}; use self::number::*; use crate::context::ContextId; @@ -116,7 +116,7 @@ pub fn syscall(a: usize, b: usize, c: usize, d: usize, e: usize, f: usize, bp: u SYS_GETGID => getgid(), SYS_GETNS => getns(), SYS_GETUID => getuid(), - SYS_MPROTECT => mprotect(b, c, ProtFlags::from_bits_truncate(d)), + SYS_MPROTECT => mprotect(b, c, MapFlags::from_bits_truncate(d)), SYS_MKNS => mkns(validate_slice(b as *const [usize; 2], c)?), SYS_SETPGID => setpgid(ContextId::from(b), ContextId::from(c)), SYS_SETREUID => setreuid(b as u32, c as u32), diff --git a/src/syscall/process.rs b/src/syscall/process.rs index 4f80b77511bd2a99b24603c7d3b042d48fa973fd..646db9a1a1300cbed5966aea78abdb3fc3c36cf4 100644 --- a/src/syscall/process.rs +++ b/src/syscall/process.rs @@ -24,7 +24,7 @@ use crate::start::usermode; use crate::syscall::data::{PtraceEvent, SigAction, Stat}; use crate::syscall::error::*; use crate::syscall::flag::{CloneFlags, CLONE_VFORK, CLONE_VM, CLONE_FS, CLONE_FILES, CLONE_SIGHAND, - CLONE_STACK, ProtFlags, PROT_EXEC, PROT_READ, PROT_WRITE, PTRACE_EVENT_CLONE, + CLONE_STACK, MapFlags, PROT_EXEC, PROT_READ, PROT_WRITE, PTRACE_EVENT_CLONE, SigActionFlags, SIG_DFL, SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK, SIGCONT, SIGTERM, WaitFlags, WCONTINUED, WNOHANG, WUNTRACED, wifcontinued, wifstopped}; use crate::syscall::ptrace_event; @@ -1290,7 +1290,7 @@ pub fn kill(pid: ContextId, sig: usize) -> Result<usize> { } } -pub fn mprotect(address: usize, size: usize, flags: ProtFlags) -> Result<usize> { +pub fn mprotect(address: usize, size: usize, flags: MapFlags) -> Result<usize> { println!("mprotect {:#X}, {}, {:#X}", address, size, flags); let end_offset = size.checked_sub(1).ok_or(Error::new(EFAULT))?; diff --git a/syscall b/syscall index 9a7bd554d57f78214b70f9f0fb0b961e20a6dff7..51f0ef2826ef2b0369766c8f23c8069ae0a56846 160000 --- a/syscall +++ b/syscall @@ -1 +1 @@ -Subproject commit 9a7bd554d57f78214b70f9f0fb0b961e20a6dff7 +Subproject commit 51f0ef2826ef2b0369766c8f23c8069ae0a56846