From 6024e1e1fa0fdd9d31b1afbe034ebb0d84c1a98c Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Fri, 30 Jun 2023 11:39:28 +0200 Subject: [PATCH] Remove scheme funmap methods. --- src/flag.rs | 8 ++++++- src/number.rs | 7 ++++++ src/scheme/scheme.rs | 39 +--------------------------------- src/scheme/scheme_block.rs | 39 +--------------------------------- src/scheme/scheme_block_mut.rs | 39 +--------------------------------- src/scheme/scheme_mut.rs | 39 +--------------------------------- 6 files changed, 18 insertions(+), 153 deletions(-) diff --git a/src/flag.rs b/src/flag.rs index dff3aa9eee..4b803bf356 100644 --- a/src/flag.rs +++ b/src/flag.rs @@ -54,11 +54,18 @@ pub const FUTEX_WAKE: usize = 1; pub const FUTEX_REQUEUE: usize = 2; pub const FUTEX_WAIT64: usize = 3; +// packet.c = fd pub const SKMSG_FRETURNFD: usize = 0; +// packet.uid:packet.gid = offset, packet.c = page_count +pub const SKMSG_PROVIDE_MMAP: usize = 1; + bitflags! { pub struct MapFlags: usize { + // TODO: Downgrade PROT_NONE to global constant? (bitflags specifically states zero flags + // can cause buggy behavior). const PROT_NONE = 0x0000_0000; + const PROT_EXEC = 0x0001_0000; const PROT_WRITE = 0x0002_0000; const PROT_READ = 0x0004_0000; @@ -66,7 +73,6 @@ bitflags! { const MAP_SHARED = 0x0001; const MAP_PRIVATE = 0x0002; - /// Only accepted for mmap2(2). const MAP_FIXED = 0x0004; const MAP_FIXED_NOREPLACE = 0x000C; } diff --git a/src/number.rs b/src/number.rs index dc8281938e..72daf705ad 100644 --- a/src/number.rs +++ b/src/number.rs @@ -37,9 +37,16 @@ pub const SYS_FSYNC: usize = SYS_CLASS_FILE | 118; pub const SYS_FTRUNCATE: usize = SYS_CLASS_FILE | 93; pub const SYS_FUTIMENS: usize = SYS_CLASS_FILE | SYS_ARG_SLICE | 320; +// b = file, c = flags, d = required_page_count, uid:gid = offset pub const KSMSG_MMAP: usize = SYS_CLASS_FILE | 72; + +// b = file, c = flags, d = page_count, uid:gid = offset pub const KSMSG_MSYNC: usize = SYS_CLASS_FILE | 73; + +// b = file, c = page_count, uid:gid = offset pub const KSMSG_MUNMAP: usize = SYS_CLASS_FILE | 74; + +// b = file, c = flags, d = page_count, uid:gid = offset pub const KSMSG_MMAP_PREP: usize = SYS_CLASS_FILE | 75; pub const SYS_CLOCK_GETTIME: usize = 265; diff --git a/src/scheme/scheme.rs b/src/scheme/scheme.rs index 46e3abefac..50927f036d 100644 --- a/src/scheme/scheme.rs +++ b/src/scheme/scheme.rs @@ -36,18 +36,6 @@ pub trait Scheme { SYS_FCHOWN => self.fchown(packet.b, packet.c as u32, packet.d as u32), SYS_FCNTL => self.fcntl(packet.b, packet.c, packet.d), SYS_FEVENT => self.fevent(packet.b, EventFlags::from_bits_truncate(packet.c)).map(|f| f.bits()), - SYS_FMAP_OLD => if packet.d >= mem::size_of::() { - self.fmap_old(packet.b, unsafe { &*(packet.c as *const OldMap) }) - } else { - Err(Error::new(EFAULT)) - }, - SYS_FMAP => if packet.d >= mem::size_of::() { - self.fmap(packet.b, unsafe { &*(packet.c as *const Map) }) - } else { - Err(Error::new(EFAULT)) - }, - SYS_FUNMAP_OLD => self.funmap_old(packet.b), - SYS_FUNMAP => self.funmap(packet.b, packet.c), SYS_FPATH => self.fpath(packet.b, unsafe { slice::from_raw_parts_mut(packet.c as *mut u8, packet.d) }), SYS_FRENAME => if let Some(path) = unsafe { str_from_raw_parts(packet.c as *const u8, packet.d) } { self.frename(packet.b, path, packet.uid, packet.gid) @@ -72,6 +60,7 @@ pub trait Scheme { Err(Error::new(EFAULT)) }, SYS_CLOSE => self.close(packet.b), + _ => Err(Error::new(ENOSYS)) }; @@ -150,32 +139,6 @@ pub trait Scheme { Err(Error::new(EBADF)) } - #[allow(unused_variables)] - fn fmap_old(&self, id: usize, map: &OldMap) -> Result { - Err(Error::new(EBADF)) - } - #[allow(unused_variables)] - fn fmap(&self, id: usize, map: &Map) -> Result { - if map.flags.contains(MapFlags::MAP_FIXED) { - return Err(Error::new(EINVAL)); - } - self.fmap_old(id, &OldMap { - offset: map.offset, - size: map.size, - flags: map.flags, - }) - } - - #[allow(unused_variables)] - fn funmap_old(&self, address: usize) -> Result { - Ok(0) - } - - #[allow(unused_variables)] - fn funmap(&self, address: usize, length: usize) -> Result { - Ok(0) - } - #[allow(unused_variables)] fn fpath(&self, id: usize, buf: &mut [u8]) -> Result { Err(Error::new(EBADF)) diff --git a/src/scheme/scheme_block.rs b/src/scheme/scheme_block.rs index 2db6c361ae..391882746e 100644 --- a/src/scheme/scheme_block.rs +++ b/src/scheme/scheme_block.rs @@ -36,18 +36,6 @@ pub trait SchemeBlock { SYS_FCHOWN => self.fchown(packet.b, packet.c as u32, packet.d as u32), SYS_FCNTL => self.fcntl(packet.b, packet.c, packet.d), SYS_FEVENT => self.fevent(packet.b, EventFlags::from_bits_truncate(packet.c)).map(|f| f.map(|f| f.bits())), - SYS_FMAP_OLD => if packet.d >= mem::size_of::() { - self.fmap_old(packet.b, unsafe { &*(packet.c as *const OldMap) }) - } else { - Err(Error::new(EFAULT)) - }, - SYS_FMAP => if packet.d >= mem::size_of::() { - self.fmap(packet.b, unsafe { &*(packet.c as *const Map) }) - } else { - Err(Error::new(EFAULT)) - }, - SYS_FUNMAP_OLD => self.funmap_old(packet.b), - SYS_FUNMAP => self.funmap(packet.b, packet.c), SYS_FPATH => self.fpath(packet.b, unsafe { slice::from_raw_parts_mut(packet.c as *mut u8, packet.d) }), SYS_FRENAME => if let Some(path) = unsafe { str_from_raw_parts(packet.c as *const u8, packet.d) } { self.frename(packet.b, path, packet.uid, packet.gid) @@ -72,6 +60,7 @@ pub trait SchemeBlock { Err(Error::new(EFAULT)) }, SYS_CLOSE => self.close(packet.b), + _ => Err(Error::new(ENOSYS)) }; @@ -150,32 +139,6 @@ pub trait SchemeBlock { Err(Error::new(EBADF)) } - #[allow(unused_variables)] - fn fmap_old(&self, id: usize, map: &OldMap) -> Result> { - Err(Error::new(EBADF)) - } - #[allow(unused_variables)] - fn fmap(&self, id: usize, map: &Map) -> Result> { - if map.flags.contains(MapFlags::MAP_FIXED) { - return Err(Error::new(EINVAL)); - } - self.fmap_old(id, &OldMap { - offset: map.offset, - size: map.size, - flags: map.flags, - }) - } - - #[allow(unused_variables)] - fn funmap_old(&self, address: usize) -> Result> { - Ok(Some(0)) - } - - #[allow(unused_variables)] - fn funmap(&self, address: usize, length: usize) -> Result> { - Ok(Some(0)) - } - #[allow(unused_variables)] fn fpath(&self, id: usize, buf: &mut [u8]) -> Result> { Err(Error::new(EBADF)) diff --git a/src/scheme/scheme_block_mut.rs b/src/scheme/scheme_block_mut.rs index 62302ea2c9..b7ca832479 100644 --- a/src/scheme/scheme_block_mut.rs +++ b/src/scheme/scheme_block_mut.rs @@ -36,18 +36,6 @@ pub trait SchemeBlockMut { SYS_FCHOWN => self.fchown(packet.b, packet.c as u32, packet.d as u32), SYS_FCNTL => self.fcntl(packet.b, packet.c, packet.d), SYS_FEVENT => self.fevent(packet.b, EventFlags::from_bits_truncate(packet.c)).map(|f| f.map(|f| f.bits())), - SYS_FMAP_OLD => if packet.d >= mem::size_of::() { - self.fmap_old(packet.b, unsafe { &*(packet.c as *const OldMap) }) - } else { - Err(Error::new(EFAULT)) - }, - SYS_FMAP => if packet.d >= mem::size_of::() { - self.fmap(packet.b, unsafe { &*(packet.c as *const Map) }) - } else { - Err(Error::new(EFAULT)) - }, - SYS_FUNMAP_OLD => self.funmap_old(packet.b), - SYS_FUNMAP => self.funmap(packet.b, packet.c), SYS_FPATH => self.fpath(packet.b, unsafe { slice::from_raw_parts_mut(packet.c as *mut u8, packet.d) }), SYS_FRENAME => if let Some(path) = unsafe { str_from_raw_parts(packet.c as *const u8, packet.d) } { self.frename(packet.b, path, packet.uid, packet.gid) @@ -72,6 +60,7 @@ pub trait SchemeBlockMut { Err(Error::new(EFAULT)) }, SYS_CLOSE => self.close(packet.b), + _ => Err(Error::new(ENOSYS)) }; @@ -150,32 +139,6 @@ pub trait SchemeBlockMut { Err(Error::new(EBADF)) } - #[allow(unused_variables)] - fn fmap_old(&mut self, id: usize, map: &OldMap) -> Result> { - Err(Error::new(EBADF)) - } - #[allow(unused_variables)] - fn fmap(&mut self, id: usize, map: &Map) -> Result> { - if map.flags.contains(MapFlags::MAP_FIXED) { - return Err(Error::new(EINVAL)); - } - self.fmap_old(id, &OldMap { - offset: map.offset, - size: map.size, - flags: map.flags, - }) - } - - #[allow(unused_variables)] - fn funmap_old(&mut self, address: usize) -> Result> { - Ok(Some(0)) - } - - #[allow(unused_variables)] - fn funmap(&mut self, address: usize, length: usize) -> Result> { - Ok(Some(0)) - } - #[allow(unused_variables)] fn fpath(&mut self, id: usize, buf: &mut [u8]) -> Result> { Err(Error::new(EBADF)) diff --git a/src/scheme/scheme_mut.rs b/src/scheme/scheme_mut.rs index 229a5c866b..a7a7a3a76a 100644 --- a/src/scheme/scheme_mut.rs +++ b/src/scheme/scheme_mut.rs @@ -36,18 +36,6 @@ pub trait SchemeMut { SYS_FCHOWN => self.fchown(packet.b, packet.c as u32, packet.d as u32), SYS_FCNTL => self.fcntl(packet.b, packet.c, packet.d), SYS_FEVENT => self.fevent(packet.b, EventFlags::from_bits_truncate(packet.c)).map(|f| f.bits()), - SYS_FMAP_OLD => if packet.d >= mem::size_of::() { - self.fmap_old(packet.b, unsafe { &*(packet.c as *const OldMap) }) - } else { - Err(Error::new(EFAULT)) - }, - SYS_FMAP => if packet.d >= mem::size_of::() { - self.fmap(packet.b, unsafe { &*(packet.c as *const Map) }) - } else { - Err(Error::new(EFAULT)) - }, - SYS_FUNMAP_OLD => self.funmap_old(packet.b), - SYS_FUNMAP => self.funmap(packet.b, packet.c), SYS_FPATH => self.fpath(packet.b, unsafe { slice::from_raw_parts_mut(packet.c as *mut u8, packet.d) }), SYS_FRENAME => if let Some(path) = unsafe { str_from_raw_parts(packet.c as *const u8, packet.d) } { self.frename(packet.b, path, packet.uid, packet.gid) @@ -72,6 +60,7 @@ pub trait SchemeMut { Err(Error::new(EFAULT)) }, SYS_CLOSE => self.close(packet.b), + _ => Err(Error::new(ENOSYS)) }; @@ -150,32 +139,6 @@ pub trait SchemeMut { Err(Error::new(EBADF)) } - #[allow(unused_variables)] - fn fmap_old(&mut self, id: usize, map: &OldMap) -> Result { - Err(Error::new(EBADF)) - } - #[allow(unused_variables)] - fn fmap(&mut self, id: usize, map: &Map) -> Result { - if map.flags.contains(MapFlags::MAP_FIXED) { - return Err(Error::new(EINVAL)); - } - self.fmap_old(id, &OldMap { - offset: map.offset, - size: map.size, - flags: map.flags, - }) - } - - #[allow(unused_variables)] - fn funmap_old(&mut self, address: usize) -> Result { - Ok(0) - } - - #[allow(unused_variables)] - fn funmap(&mut self, address: usize, length: usize) -> Result { - Ok(0) - } - #[allow(unused_variables)] fn fpath(&mut self, id: usize, buf: &mut [u8]) -> Result { Err(Error::new(EBADF))