mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
d214326e8e
For some usecases, silencing syscall_print()s is ideal. A good example of that is syzkaller, which uses logs to detect crashes and a badly timed syscall_print() could interfere. Add a nouserprint argument which skips printing on syscall_print().
49 lines
910 B
C
49 lines
910 B
C
#include <kernel/syscalls.h>
|
|
#include <printf.h>
|
|
#include <arch/e9.h>
|
|
#include <mutex.h>
|
|
#include <util.h>
|
|
#include <arch/cpu.h>
|
|
#include <kernel/kernel_args.h>
|
|
|
|
DEFINE_KERNEL_ARGUMENT(nouserprint, bool);
|
|
|
|
syscallret_t syscall_print(context_t *context, char *message) {
|
|
syscallret_t ret = {
|
|
.ret = -1
|
|
};
|
|
|
|
if (GET_KERNEL_ARGUMENT(nouserprint, bool))
|
|
goto leave;
|
|
|
|
static MUTEX_DEFINE(mutex);
|
|
|
|
size_t len;
|
|
ret.errno = usercopy_strlen(message, &len);
|
|
if (ret.errno)
|
|
return ret;
|
|
|
|
len = min(len, 1023);
|
|
|
|
char msg[1024];
|
|
ret.errno = usercopy_fromuser(msg, message, len);
|
|
if (ret.errno)
|
|
return ret;
|
|
|
|
msg[len] = '\0';
|
|
|
|
char prefix[100];
|
|
snprintf(prefix, 100, "pid %d tid %d: ", current_thread()->proc->pid, current_thread()->tid);
|
|
|
|
MUTEX_ACQUIRE(&mutex);
|
|
arch_e9_puts(prefix);
|
|
arch_e9_puts(msg);
|
|
arch_e9_putc('\n');
|
|
MUTEX_RELEASE(&mutex);
|
|
|
|
leave:
|
|
ret.errno = 0;
|
|
ret.ret = 0;
|
|
return ret;
|
|
}
|