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