From f80d0764b56d3017c1ba558ee33fa7e794484b5f Mon Sep 17 00:00:00 2001 From: LoveSy Date: Thu, 1 Feb 2024 23:35:42 +0800 Subject: [PATCH] Use rustix for `setgroups` (#1334) --- userspace/ksud/src/ksu.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/userspace/ksud/src/ksu.rs b/userspace/ksud/src/ksu.rs index 29042a388ad1..c4b8fcd82d11 100644 --- a/userspace/ksud/src/ksu.rs +++ b/userspace/ksud/src/ksu.rs @@ -1,4 +1,5 @@ use anyhow::{Ok, Result}; +use core::slice::SlicePattern; use getopts::Options; use std::env; #[cfg(unix)] @@ -38,14 +39,15 @@ fn print_usage(program: &str, opts: Options) { } fn set_identity(uid: u32, gid: u32, groups: &[u32]) { - #[cfg(any(target_os = "linux", target_os = "android"))] - unsafe { - if !groups.is_empty() { - libc::setgroups(groups.len(), groups.as_ptr()); - } - } #[cfg(any(target_os = "linux", target_os = "android"))] { + rustix::process::set_groups( + groups + .iter() + .map(|g| unsafe { Gid::from_raw(*g) }) + .collect::>() + .as_slice(), + ); let gid = unsafe { Gid::from_raw(gid) }; let uid = unsafe { Uid::from_raw(uid) }; set_thread_res_gid(gid, gid, gid).ok();