From 785d3237b91c7fb4e43da2fdcb26119393d283ab Mon Sep 17 00:00:00 2001 From: "Tate, Hongliang Tian" Date: Wed, 10 Apr 2019 00:13:57 +0800 Subject: [PATCH] Add getuid, getgid, geteuid, getegid, etc. --- src/libos/src/process/process.rs | 4 ++-- src/libos/src/process/thread.rs | 2 ++ src/libos/src/syscall/mod.rs | 30 ++++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/libos/src/process/process.rs b/src/libos/src/process/process.rs index 74260c18..fbfeffd3 100644 --- a/src/libos/src/process/process.rs +++ b/src/libos/src/process/process.rs @@ -10,7 +10,7 @@ lazy_static! { task: Default::default(), status: Default::default(), pid: 0, - pgid: 0, + pgid: 1, tgid: 0, exit_status: 0, cwd: "/".to_owned(), @@ -38,7 +38,7 @@ impl Process { task: task, status: Default::default(), pid: new_pid, - pgid: new_pid, + pgid: 1, // TODO: implement pgid tgid: new_pid, cwd: cwd.to_owned(), clear_child_tid: None, diff --git a/src/libos/src/process/thread.rs b/src/libos/src/process/thread.rs index e28187d9..31837341 100644 --- a/src/libos/src/process/thread.rs +++ b/src/libos/src/process/thread.rs @@ -68,6 +68,8 @@ pub fn do_clone( let mut new_thread = new_thread_ref.lock().unwrap(); parent.children.push(Arc::downgrade(&new_thread_ref)); new_thread.parent = Some(parent_ref.clone()); + + new_thread.tgid = current.tgid; } process_table::put(new_thread_pid, new_thread_ref.clone()); diff --git a/src/libos/src/syscall/mod.rs b/src/libos/src/syscall/mod.rs index 139cd4cc..7944ce36 100644 --- a/src/libos/src/syscall/mod.rs +++ b/src/libos/src/syscall/mod.rs @@ -86,6 +86,12 @@ pub extern "C" fn dispatch_syscall( SYS_GETPID => do_getpid(), SYS_GETTID => do_gettid(), SYS_GETPPID => do_getppid(), + SYS_GETPGID => do_getpgid(), + + SYS_GETUID => do_getuid(), + SYS_GETGID => do_getgid(), + SYS_GETEUID => do_geteuid(), + SYS_GETEGID => do_getegid(), SYS_RT_SIGACTION => do_rt_sigaction(), SYS_RT_SIGPROCMASK => do_rt_sigprocmask(), @@ -577,6 +583,30 @@ fn do_getppid() -> Result { Ok(ppid as isize) } +fn do_getpgid() -> Result { + let pgid = process::do_getpgid(); + Ok(pgid as isize) +} + +// TODO: implement uid, gid, euid, egid + +fn do_getuid() -> Result { + Ok(0) +} + +fn do_getgid() -> Result { + Ok(0) +} + +fn do_geteuid() -> Result { + Ok(0) +} + +fn do_getegid() -> Result { + Ok(0) +} + + fn do_pipe2(fds_u: *mut i32, flags: u32) -> Result { check_mut_array(fds_u, 2)?; // TODO: how to deal with open flags???