/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include namespace Kernel { ErrorOr Process::sys$getuid() { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this) TRY(require_promise(Pledge::stdio)); return uid().value(); } ErrorOr Process::sys$getgid() { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this) TRY(require_promise(Pledge::stdio)); return gid().value(); } ErrorOr Process::sys$geteuid() { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this) TRY(require_promise(Pledge::stdio)); return euid().value(); } ErrorOr Process::sys$getegid() { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this) TRY(require_promise(Pledge::stdio)); return egid().value(); } ErrorOr Process::sys$getresuid(Userspace ruid, Userspace euid, Userspace suid) { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this) TRY(require_promise(Pledge::stdio)); TRY(copy_to_user(ruid, &m_protected_values.uid)); TRY(copy_to_user(euid, &m_protected_values.euid)); TRY(copy_to_user(suid, &m_protected_values.suid)); return 0; } ErrorOr Process::sys$getresgid(Userspace rgid, Userspace egid, Userspace sgid) { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this) TRY(require_promise(Pledge::stdio)); TRY(copy_to_user(rgid, &m_protected_values.gid)); TRY(copy_to_user(egid, &m_protected_values.egid)); TRY(copy_to_user(sgid, &m_protected_values.sgid)); return 0; } ErrorOr Process::sys$getgroups(size_t count, Userspace user_gids) { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this) TRY(require_promise(Pledge::stdio)); if (!count) return extra_gids().size(); if (count != extra_gids().size()) return EINVAL; TRY(copy_to_user(user_gids, extra_gids().data(), sizeof(gid_t) * count)); return 0; } }