mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-28 21:28:21 +00:00
signal: do auth check
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user