From a35528bb2b76ae68508deef4b4c72b2e3cb54716 Mon Sep 17 00:00:00 2001 From: Anhad Singh Date: Wed, 3 Jul 2024 14:49:56 +1000 Subject: [PATCH] feat(mmap): ensure the file is readable Signed-off-by: Anhad Singh --- src/aero_kernel/src/fs/file_table.rs | 6 ++++-- src/aero_kernel/src/userland/vm.rs | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/aero_kernel/src/fs/file_table.rs b/src/aero_kernel/src/fs/file_table.rs index b8fb2bffeff..fe76cf14e38 100644 --- a/src/aero_kernel/src/fs/file_table.rs +++ b/src/aero_kernel/src/fs/file_table.rs @@ -65,8 +65,10 @@ impl FileHandle { #[inline] pub fn is_readable(&self) -> bool { - self.flags() - .intersects(OpenFlags::O_RDONLY | OpenFlags::O_RDWR) + // FIXME: switch to Linux ABI for fcntl. mlibc defines O_RDONLY as 0 so, we have to infer + // the read-only flag. + let flags = self.flags(); + flags.contains(OpenFlags::O_RDWR) || !flags.contains(OpenFlags::O_WRONLY) } pub fn flags(&self) -> OpenFlags { diff --git a/src/aero_kernel/src/userland/vm.rs b/src/aero_kernel/src/userland/vm.rs index fe7ab496486..92ebb78032a 100644 --- a/src/aero_kernel/src/userland/vm.rs +++ b/src/aero_kernel/src/userland/vm.rs @@ -1410,7 +1410,7 @@ impl Vm { } if !file.is_readable() { - // return None; // EACCES + return None; // EACCES } // TODO: * check if the filsystem is noexec mounted and remove the MAY_EXEC flag. @@ -1419,7 +1419,7 @@ impl Vm { (MMapFlags::MAP_PRIVATE, Some(file)) => { if !file.is_readable() { - // return None; // EACCES + return None; // EACCES } // TODO: * check if the filsystem is noexec mounted and remove the MAY_EXEC flag.