1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:07:34 +00:00

Kernel: Add "setkeymap" pledge promise

This commit is contained in:
Andreas Kling 2020-06-18 22:18:44 +02:00
parent 033da11364
commit 0609eefd57
3 changed files with 24 additions and 21 deletions

View file

@ -49,6 +49,7 @@ If the process later attempts to use any system functionality it has previously
* `chroot`: The [`chroot(2)`](chroot.md) syscall (\*) * `chroot`: The [`chroot(2)`](chroot.md) syscall (\*)
* `video`: May use [`ioctl(2)`](ioctl.md) and [`mmap(2)`](mmap.md) on framebuffer video devices * `video`: May use [`ioctl(2)`](ioctl.md) and [`mmap(2)`](mmap.md) on framebuffer video devices
* `settime`: Changing the system time and date * `settime`: Changing the system time and date
* `setkeymap`: Changing the system keyboard layout
* `sigaction`: Change signal handlers and dispositions (\*) * `sigaction`: Change signal handlers and dispositions (\*)
Promises marked with an asterisk (\*) are SerenityOS specific extensions not supported by the original OpenBSD `pledge()`. Promises marked with an asterisk (\*) are SerenityOS specific extensions not supported by the original OpenBSD `pledge()`.

View file

@ -4295,10 +4295,11 @@ ssize_t Process::sys$getrandom(void* buffer, size_t buffer_size, unsigned int fl
int Process::sys$setkeymap(const Syscall::SC_setkeymap_params* user_params) int Process::sys$setkeymap(const Syscall::SC_setkeymap_params* user_params)
{ {
REQUIRE_PROMISE(setkeymap);
if (!is_superuser()) if (!is_superuser())
return -EPERM; return -EPERM;
REQUIRE_NO_PROMISES;
Syscall::SC_setkeymap_params params; Syscall::SC_setkeymap_params params;
if (!validate_read_and_copy_typed(&params, user_params)) if (!validate_read_and_copy_typed(&params, user_params))
return -EFAULT; return -EFAULT;

View file

@ -36,11 +36,11 @@
#include <Kernel/FileSystem/InodeMetadata.h> #include <Kernel/FileSystem/InodeMetadata.h>
#include <Kernel/Forward.h> #include <Kernel/Forward.h>
#include <Kernel/Lock.h> #include <Kernel/Lock.h>
#include <Kernel/StdLib.h>
#include <Kernel/Syscall.h> #include <Kernel/Syscall.h>
#include <Kernel/Thread.h> #include <Kernel/Thread.h>
#include <Kernel/UnixTypes.h> #include <Kernel/UnixTypes.h>
#include <Kernel/VM/RangeAllocator.h> #include <Kernel/VM/RangeAllocator.h>
#include <Kernel/StdLib.h>
#include <LibC/signal_numbers.h> #include <LibC/signal_numbers.h>
namespace ELF { namespace ELF {
@ -54,26 +54,27 @@ void kgettimeofday(timeval&);
extern VirtualAddress g_return_to_ring3_from_signal_trampoline; extern VirtualAddress g_return_to_ring3_from_signal_trampoline;
#define ENUMERATE_PLEDGE_PROMISES \ #define ENUMERATE_PLEDGE_PROMISES \
__ENUMERATE_PLEDGE_PROMISE(stdio) \ __ENUMERATE_PLEDGE_PROMISE(stdio) \
__ENUMERATE_PLEDGE_PROMISE(rpath) \ __ENUMERATE_PLEDGE_PROMISE(rpath) \
__ENUMERATE_PLEDGE_PROMISE(wpath) \ __ENUMERATE_PLEDGE_PROMISE(wpath) \
__ENUMERATE_PLEDGE_PROMISE(cpath) \ __ENUMERATE_PLEDGE_PROMISE(cpath) \
__ENUMERATE_PLEDGE_PROMISE(dpath) \ __ENUMERATE_PLEDGE_PROMISE(dpath) \
__ENUMERATE_PLEDGE_PROMISE(inet) \ __ENUMERATE_PLEDGE_PROMISE(inet) \
__ENUMERATE_PLEDGE_PROMISE(id) \ __ENUMERATE_PLEDGE_PROMISE(id) \
__ENUMERATE_PLEDGE_PROMISE(proc) \ __ENUMERATE_PLEDGE_PROMISE(proc) \
__ENUMERATE_PLEDGE_PROMISE(exec) \ __ENUMERATE_PLEDGE_PROMISE(exec) \
__ENUMERATE_PLEDGE_PROMISE(unix) \ __ENUMERATE_PLEDGE_PROMISE(unix) \
__ENUMERATE_PLEDGE_PROMISE(fattr) \ __ENUMERATE_PLEDGE_PROMISE(fattr) \
__ENUMERATE_PLEDGE_PROMISE(tty) \ __ENUMERATE_PLEDGE_PROMISE(tty) \
__ENUMERATE_PLEDGE_PROMISE(chown) \ __ENUMERATE_PLEDGE_PROMISE(chown) \
__ENUMERATE_PLEDGE_PROMISE(chroot) \ __ENUMERATE_PLEDGE_PROMISE(chroot) \
__ENUMERATE_PLEDGE_PROMISE(thread) \ __ENUMERATE_PLEDGE_PROMISE(thread) \
__ENUMERATE_PLEDGE_PROMISE(video) \ __ENUMERATE_PLEDGE_PROMISE(video) \
__ENUMERATE_PLEDGE_PROMISE(accept) \ __ENUMERATE_PLEDGE_PROMISE(accept) \
__ENUMERATE_PLEDGE_PROMISE(settime) \ __ENUMERATE_PLEDGE_PROMISE(settime) \
__ENUMERATE_PLEDGE_PROMISE(sigaction) \ __ENUMERATE_PLEDGE_PROMISE(sigaction) \
__ENUMERATE_PLEDGE_PROMISE(setkeymap) \
__ENUMERATE_PLEDGE_PROMISE(shared_buffer) __ENUMERATE_PLEDGE_PROMISE(shared_buffer)
enum class Pledge : u32 { enum class Pledge : u32 {