signal: do auth check

This commit is contained in:
Matheus
2024-09-05 16:24:18 -03:00
parent ee254a81e9
commit c2e50547cc
5 changed files with 39 additions and 19 deletions
+18 -6
View File
@@ -2,6 +2,7 @@
#include <arch/cpu.h>
#include <logging.h>
#include <kernel/jobctl.h>
#include <kernel/auth.h>
syscallret_t syscall_kill(context_t *context, int pid, int signal) {
syscallret_t ret = {
@@ -30,16 +31,27 @@ syscallret_t syscall_kill(context_t *context, int pid, int signal) {
return ret;
}
if (pid >= 1)
signal_signalproc(target, signal);
else
ret.errno = jobctl_signal(target, signal);
// null signal is meant to find out about the existance of a process
if (signal == 0)
goto leave;
if (pid >= 1) {
if (signal != SIGCONT && jobctl_getpgid(target) != jobctl_getpgid(_cpu()->thread->proc)) {
ret.errno = auth_process_check(&_cpu()->thread->proc->cred, AUTH_ACTIONS_PROCESS_SIGNAL, target);
if (ret.errno)
goto leave;
}
signal_signalproc(target, signal);
} else {
ret.errno = jobctl_signal(target, signal, _cpu()->thread->proc);
}
leave:
if (target) {
PROC_RELEASE(target);
}
ret.errno = 0;
ret.ret = 0;
ret.ret = ret.errno ? -1 : 0;
return ret;
}