From 75509aba72ecf36feeb0a0b6b8fa397286386265 Mon Sep 17 00:00:00 2001 From: weishu Date: Sun, 4 Jun 2023 23:14:37 +0800 Subject: [PATCH] ksud: fix gid is override by uid --- userspace/ksud/src/ksu.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/userspace/ksud/src/ksu.rs b/userspace/ksud/src/ksu.rs index f82f2b53..170402cf 100644 --- a/userspace/ksud/src/ksu.rs +++ b/userspace/ksud/src/ksu.rs @@ -58,11 +58,11 @@ fn print_usage(program: &str, opts: Options) { print!("{}", opts.usage(&brief)); } -fn set_identity(uid: u32) { +fn set_identity(uid: u32, gid: u32) { #[cfg(any(target_os = "linux", target_os = "android"))] unsafe { libc::seteuid(uid); - libc::setresgid(uid, uid, uid); + libc::setresgid(gid, gid, gid); libc::setresuid(uid, uid, uid); } } @@ -170,6 +170,7 @@ pub fn root_shell() -> Result<()> { // use current uid if no user specified, these has been done in kernel! let mut uid = unsafe { libc::getuid() }; + let gid = unsafe { libc::getgid() }; if free_idx < matches.free.len() { let name = &matches.free[free_idx]; uid = unsafe { @@ -235,7 +236,7 @@ pub fn root_shell() -> Result<()> { let _ = utils::unshare_mnt_ns(); } - set_identity(uid); + set_identity(uid, gid); std::result::Result::Ok(()) })