From 6cbe58797781cb8514a62bb3ab0e3e8a5d58bce2 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Thu, 31 Aug 2023 01:06:41 +0200 Subject: kernel: add _sys_getprocfs in place of HANDLE_PROCFS This makes the side-effects more explicit, and feels less hacky than `HANDLE_PROCFS`. I don't think accessing a handle alone should have side-effects, even if it's a "special" one. --- src/libc/camellia.c | 11 +++++++++++ src/libc/include/camellia.h | 2 ++ src/libc/syscall.c | 4 ++++ 3 files changed, 17 insertions(+) (limited to 'src/libc') diff --git a/src/libc/camellia.c b/src/libc/camellia.c index 4e092e4..bc38e77 100644 --- a/src/libc/camellia.c +++ b/src/libc/camellia.c @@ -28,3 +28,14 @@ hid_t camellia_open(const char *path, int flags) { return ret; } + +int camellia_procfs(const char *path) { + hid_t hid = _sys_getprocfs(0); + if (hid < 0) { + errno = -hid; + return -1; + } + _sys_mount(hid, path, strlen(path)); + close(hid); + return 0; +} diff --git a/src/libc/include/camellia.h b/src/libc/include/camellia.h index 2e4998b..49298bd 100644 --- a/src/libc/include/camellia.h +++ b/src/libc/include/camellia.h @@ -3,3 +3,5 @@ #include hid_t camellia_open(const char *path, int flags); + +int camellia_procfs(const char *path); diff --git a/src/libc/syscall.c b/src/libc/syscall.c index b920e14..706aec6 100644 --- a/src/libc/syscall.c +++ b/src/libc/syscall.c @@ -90,6 +90,10 @@ int _sys_wait2(int pid, int flags, struct sys_wait2 __user *out) { return (int)_syscall(_SYS_WAIT2, (long)pid, (long)flags, (long)out, 0, 0); } +hid_t _sys_getprocfs(int flags) { + return (hid_t)_syscall(_SYS_GETPROCFS, (long)flags, 0, 0, 0, 0); +} + long _sys_execbuf(void __user *buf, size_t len) { return _syscall(_SYS_EXECBUF, (long)buf, (long)len, 0, 0, 0); } -- cgit v1.2.3