Merge pull request #172 from arihant2math/sid

Implement sid syscalls
This commit is contained in:
Matthew Leach
2026-01-20 06:24:27 +00:00
committed by GitHub
3 changed files with 22 additions and 4 deletions

View File

@@ -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 |

View File

@@ -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 {}),

View File

@@ -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<Gid>, egid: TUA<Gid>, sgid: TUA<Gid>) -> Re
Ok(0)
}
pub async fn sys_getsid() -> Result<usize> {
let sid: u32 = current_task().process.sid.lock_save_irq().value();
Ok(sid as _)
}
pub async fn sys_setsid() -> Result<usize> {
let process = current_task().process.clone();
let new_sid = process.tgid.value();
*process.sid.lock_save_irq() = Sid(new_sid);
Ok(new_sid as _)
}