From 05b7fec5174e5bb547d4a82bb349546f921ca3b7 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Sun, 31 May 2020 21:58:06 +0300 Subject: [PATCH] Kernel: Tighten up some promise checks Since we're not keeping compatibility with OpenBSD about what promises are required for which syscalls, tighten things up so that they make more sense. --- Kernel/Process.cpp | 10 +++++----- Userland/hostname.cpp | 5 ----- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index bb9404df055..8296159b249 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -703,7 +703,7 @@ int Process::sys$gethostname(char* buffer, ssize_t size) int Process::sys$sethostname(const char* hostname, ssize_t length) { - REQUIRE_PROMISE(stdio); + REQUIRE_NO_PROMISES; if (!is_superuser()) return -EPERM; if (length < 0) @@ -2495,7 +2495,7 @@ KResultOr Process::do_waitid(idtype_t idtype, int id, int options) pid_t Process::sys$waitid(const Syscall::SC_waitid_params* user_params) { - REQUIRE_PROMISE(stdio); + REQUIRE_PROMISE(proc); Syscall::SC_waitid_params params; if (!validate_read_and_copy_typed(¶ms, user_params)) @@ -2545,7 +2545,7 @@ bool Process::validate_write(void* address, size_t size) const pid_t Process::sys$getsid(pid_t pid) { - REQUIRE_PROMISE(stdio); + REQUIRE_PROMISE(proc); if (pid == 0) return m_sid; InterruptDisabler disabler; @@ -2576,7 +2576,7 @@ pid_t Process::sys$setsid() pid_t Process::sys$getpgid(pid_t pid) { - REQUIRE_PROMISE(stdio); + REQUIRE_PROMISE(proc); if (pid == 0) return m_pgid; InterruptDisabler disabler; // FIXME: Use a ProcessHandle @@ -2677,7 +2677,7 @@ int Process::sys$dup2(int old_fd, int new_fd) int Process::sys$sigprocmask(int how, const sigset_t* set, sigset_t* old_set) { - REQUIRE_PROMISE(stdio); + REQUIRE_PROMISE(sigaction); if (old_set) { if (!validate_write_typed(old_set)) return -EFAULT; diff --git a/Userland/hostname.cpp b/Userland/hostname.cpp index 5015f62a82a..2d367720812 100644 --- a/Userland/hostname.cpp +++ b/Userland/hostname.cpp @@ -31,11 +31,6 @@ int main(int argc, char** argv) { - if (pledge("stdio", nullptr) < 0) { - perror("pledge"); - return 1; - } - if (argc == 1) { char buffer[HOST_NAME_MAX]; int rc = gethostname(buffer, sizeof(buffer));