From 06d016eab67042e341f8966f5f82c03d9e023329 Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Mon, 19 Jan 2026 18:19:38 -0800 Subject: [PATCH 1/2] implement sid syscalls --- src/arch/arm64/exceptions/syscall.rs | 6 ++++-- src/process/creds.rs | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/arch/arm64/exceptions/syscall.rs b/src/arch/arm64/exceptions/syscall.rs index a6e339f..80bc4fe 100644 --- a/src/arch/arm64/exceptions/syscall.rs +++ b/src/arch/arm64/exceptions/syscall.rs @@ -53,8 +53,8 @@ use crate::{ caps::{sys_capget, sys_capset}, clone::sys_clone, creds::{ - sys_getegid, sys_geteuid, sys_getgid, sys_getresgid, sys_getresuid, sys_gettid, - sys_getuid, sys_setfsgid, sys_setfsuid, + sys_getegid, sys_geteuid, sys_getgid, sys_getresgid, sys_getresuid, sys_getsid, + sys_gettid, sys_getuid, sys_setfsgid, sys_setfsuid, sys_setsid, }, exec::sys_execve, exit::{sys_exit, sys_exit_group}, @@ -471,6 +471,8 @@ pub async fn handle_syscall() { 0x98 => sys_setfsgid(arg1 as _).map_err(|e| match e {}), 0x9a => sys_setpgid(arg1 as _, Pgid(arg2 as _)), 0x9b => sys_getpgid(arg1 as _), + 0x9c => sys_getsid().await, + 0x9d => sys_setsid().await, 0xa0 => sys_uname(TUA::from_value(arg1 as _)).await, 0xa3 => Err(KernelError::InvalidValue), 0xa6 => sys_umask(arg1 as _).map_err(|e| match e {}), diff --git a/src/process/creds.rs b/src/process/creds.rs index 7b9ff4f..9a52b4c 100644 --- a/src/process/creds.rs +++ b/src/process/creds.rs @@ -1,5 +1,6 @@ use core::convert::Infallible; +use crate::process::thread_group::Sid; use crate::{ memory::uaccess::{UserCopyable, copy_to_user}, sched::current::current_task, @@ -128,3 +129,18 @@ pub async fn sys_getresgid(rgid: TUA, egid: TUA, sgid: TUA) -> Re Ok(0) } + +pub async fn sys_getsid() -> Result { + let sid: u32 = current_task().process.sid.lock_save_irq().value(); + + Ok(sid as _) +} + +pub async fn sys_setsid() -> Result { + let process = current_task().process.clone(); + + let new_sid = process.tgid.value(); + *process.sid.lock_save_irq() = Sid(new_sid); + + Ok(new_sid as _) +} From 7e2de367a961f091bcc7587841eed73301285871 Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Mon, 19 Jan 2026 18:36:31 -0800 Subject: [PATCH 2/2] update table --- etc/syscalls_linux_aarch64.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/syscalls_linux_aarch64.md b/etc/syscalls_linux_aarch64.md index 0f8a1ab..c4203c1 100644 --- a/etc/syscalls_linux_aarch64.md +++ b/etc/syscalls_linux_aarch64.md @@ -156,8 +156,8 @@ | 0x99 (153) | times | (struct tms *tbuf) | __arm64_sys_times | false | | 0x9a (154) | setpgid | (pid_t pid, pid_t pgid) | __arm64_sys_setpgid | true | | 0x9b (155) | getpgid | (pid_t pid) | __arm64_sys_getpgid | true | -| 0x9c (156) | getsid | (pid_t pid) | __arm64_sys_getsid | false | -| 0x9d (157) | setsid | () | __arm64_sys_setsid | false | +| 0x9c (156) | getsid | (pid_t pid) | __arm64_sys_getsid | true | +| 0x9d (157) | setsid | () | __arm64_sys_setsid | true | | 0x9e (158) | getgroups | (int gidsetsize, gid_t *grouplist) | __arm64_sys_getgroups | false | | 0x9f (159) | setgroups | (int gidsetsize, gid_t *grouplist) | __arm64_sys_setgroups | false | | 0xa0 (160) | newuname | (struct new_utsname *name) | __arm64_sys_newuname | true |