From e1c97395778ef25edd68f6c3b6eafc02116f41a4 Mon Sep 17 00:00:00 2001 From: LI Qing Date: Fri, 18 Dec 2020 22:53:55 +0800 Subject: [PATCH] Remove the flags argument handling in fchmodat syscall The flags argument of fchmodat syscall is handled by the wrapper function in libc already, so Occlum does not need to accept this argument. --- src/libos/src/fs/file_ops/chmod.rs | 19 +++---------------- src/libos/src/fs/file_ops/mod.rs | 2 +- src/libos/src/fs/syscalls.rs | 11 +++++------ src/libos/src/syscall/mod.rs | 2 +- 4 files changed, 10 insertions(+), 24 deletions(-) diff --git a/src/libos/src/fs/file_ops/chmod.rs b/src/libos/src/fs/file_ops/chmod.rs index d31f4eef..ed2289d2 100644 --- a/src/libos/src/fs/file_ops/chmod.rs +++ b/src/libos/src/fs/file_ops/chmod.rs @@ -55,27 +55,14 @@ impl FileMode { } } -bitflags! { - pub struct ChmodFlags: i32 { - const AT_SYMLINK_NOFOLLOW = 0x100; - } -} - -pub fn do_fchmodat(fs_path: &FsPath, mode: FileMode, flags: ChmodFlags) -> Result<()> { - debug!( - "fchmodat: fs_path: {:?}, mode: {:#o}, flags: {:?}", - fs_path, mode, flags - ); +pub fn do_fchmodat(fs_path: &FsPath, mode: FileMode) -> Result<()> { + debug!("fchmodat: fs_path: {:?}, mode: {:#o}", fs_path, mode); let inode = { let path = fs_path.to_abs_path()?; let current = current!(); let fs = current.fs().lock().unwrap(); - if flags.contains(ChmodFlags::AT_SYMLINK_NOFOLLOW) { - fs.lookup_inode_no_follow(&path)? - } else { - fs.lookup_inode(&path)? - } + fs.lookup_inode(&path)? }; let mut info = inode.metadata()?; info.mode = mode.bits(); diff --git a/src/libos/src/fs/file_ops/mod.rs b/src/libos/src/fs/file_ops/mod.rs index b976e8fc..8f28820e 100644 --- a/src/libos/src/fs/file_ops/mod.rs +++ b/src/libos/src/fs/file_ops/mod.rs @@ -3,7 +3,7 @@ use super::*; use process::Process; pub use self::access::{do_faccessat, AccessibilityCheckFlags, AccessibilityCheckMode}; -pub use self::chmod::{do_fchmod, do_fchmodat, ChmodFlags, FileMode}; +pub use self::chmod::{do_fchmod, do_fchmodat, FileMode}; pub use self::chown::{do_fchown, do_fchownat, ChownFlags}; pub use self::close::do_close; pub use self::dirent::{do_getdents, do_getdents64}; diff --git a/src/libos/src/fs/syscalls.rs b/src/libos/src/fs/syscalls.rs index 703e4b2b..53d94b83 100644 --- a/src/libos/src/fs/syscalls.rs +++ b/src/libos/src/fs/syscalls.rs @@ -1,8 +1,8 @@ use super::event_file::EventCreationFlags; use super::file_ops; use super::file_ops::{ - AccessibilityCheckFlags, AccessibilityCheckMode, ChmodFlags, ChownFlags, FcntlCmd, FsPath, - LinkFlags, StatFlags, UnlinkFlags, AT_FDCWD, + AccessibilityCheckFlags, AccessibilityCheckMode, ChownFlags, FcntlCmd, FsPath, LinkFlags, + StatFlags, UnlinkFlags, AT_FDCWD, }; use super::fs_ops; use super::*; @@ -433,7 +433,7 @@ pub fn do_symlinkat(target: *const i8, new_dirfd: i32, link_path: *const i8) -> } pub fn do_chmod(path: *const i8, mode: u16) -> Result { - self::do_fchmodat(AT_FDCWD, path, mode, 0) + self::do_fchmodat(AT_FDCWD, path, mode) } pub fn do_fchmod(fd: FileDesc, mode: u16) -> Result { @@ -442,14 +442,13 @@ pub fn do_fchmod(fd: FileDesc, mode: u16) -> Result { Ok(0) } -pub fn do_fchmodat(dirfd: i32, path: *const i8, mode: u16, flags: i32) -> Result { +pub fn do_fchmodat(dirfd: i32, path: *const i8, mode: u16) -> Result { let path = from_user::clone_cstring_safely(path)? .to_string_lossy() .into_owned(); let mode = FileMode::from_bits_truncate(mode); let fs_path = FsPath::new(&path, dirfd, false)?; - let flags = ChmodFlags::from_bits(flags).ok_or_else(|| errno!(EINVAL, "invalid flags"))?; - file_ops::do_fchmodat(&fs_path, mode, flags)?; + file_ops::do_fchmodat(&fs_path, mode)?; Ok(0) } diff --git a/src/libos/src/syscall/mod.rs b/src/libos/src/syscall/mod.rs index c88c9031..d52fd8f2 100644 --- a/src/libos/src/syscall/mod.rs +++ b/src/libos/src/syscall/mod.rs @@ -352,7 +352,7 @@ macro_rules! process_syscall_table_with_callback { (Linkat = 265) => do_linkat(olddirfd: i32, oldpath: *const i8, newdirfd: i32, newpath: *const i8, flags: i32), (Symlinkat = 266) => do_symlinkat(target: *const i8, new_dirfd: i32, link_path: *const i8), (Readlinkat = 267) => do_readlinkat(dirfd: i32, path: *const i8, buf: *mut u8, size: usize), - (Fchmodat = 268) => do_fchmodat(dirfd: i32, path: *const i8, mode: u16, flags: i32), + (Fchmodat = 268) => do_fchmodat(dirfd: i32, path: *const i8, mode: u16), (Faccessat = 269) => do_faccessat(dirfd: i32, path: *const i8, mode: u32, flags: u32), (Pselect6 = 270) => handle_unsupported(), (Ppoll = 271) => handle_unsupported(),