Files
Astral/kernel-src/sys/syscalls/print.c
T
Matheus d214326e8e print: add nouserprint argument
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().
2026-10-06 11:51:00 -03:00

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;
}