From 75dd9583166f75ec67f86a737b33acd7cefbfa44 Mon Sep 17 00:00:00 2001 From: EnderIce2 Date: Thu, 3 Apr 2025 06:32:51 +0000 Subject: [PATCH] feat(kernel/syscalls): implemented stub linux_syslog Signed-off-by: EnderIce2 --- Kernel/subsystem/linux/include/defs.hpp | 12 ++++++ Kernel/subsystem/linux/syscall.cpp | 56 ++++++++++++++++++++++++- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/Kernel/subsystem/linux/include/defs.hpp b/Kernel/subsystem/linux/include/defs.hpp index 4b7af4e0..59f6c85d 100644 --- a/Kernel/subsystem/linux/include/defs.hpp +++ b/Kernel/subsystem/linux/include/defs.hpp @@ -193,6 +193,18 @@ #define linux_RUSAGE_CHILDREN (-1) #define linux_RUSAGE_THREAD 1 +#define linux_SYSLOG_ACTION_CLOSE 0 +#define linux_SYSLOG_ACTION_OPEN 1 +#define linux_SYSLOG_ACTION_READ 2 +#define linux_SYSLOG_ACTION_READ_ALL 3 +#define linux_SYSLOG_ACTION_READ_CLEAR 4 +#define linux_SYSLOG_ACTION_CLEAR 5 +#define linux_SYSLOG_ACTION_CONSOLE_OFF 6 +#define linux_SYSLOG_ACTION_CONSOLE_ON 7 +#define linux_SYSLOG_ACTION_CONSOLE_LEVEL 8 +#define linux_SYSLOG_ACTION_SIZE_UNREAD 9 +#define linux_SYSLOG_ACTION_SIZE_BUFFER 10 + typedef long __kernel_long_t; typedef unsigned long __kernel_ulong_t; typedef long __kernel_old_time_t; diff --git a/Kernel/subsystem/linux/syscall.cpp b/Kernel/subsystem/linux/syscall.cpp index 3ddbf88d..af5dbe20 100644 --- a/Kernel/subsystem/linux/syscall.cpp +++ b/Kernel/subsystem/linux/syscall.cpp @@ -2547,6 +2547,58 @@ static int linux_getrusage(SysFrm *, int who, struct rusage *usage) return 0; } +static int linux_syslog(SysFrm *, int type, char *bufp, int size) +{ + PCB *pcb = thisProcess; + Memory::VirtualMemoryArea *vma = pcb->vma; + + auto pbufp = vma->UserCheckAndGetAddress(bufp); + if (pbufp == nullptr) + return -linux_EFAULT; + + switch (type) + { + case linux_SYSLOG_ACTION_CLOSE: + /* NOP */ + return 0; + case linux_SYSLOG_ACTION_OPEN: + /* NOP */ + return 0; + case linux_SYSLOG_ACTION_READ: + { + fixme("SYSLOG_ACTION_READ not implemented"); + const char dummy[12] = "stub string"; + memcpy(pbufp, dummy, sizeof(dummy)); + return sizeof(dummy); + } + case linux_SYSLOG_ACTION_READ_ALL: + { + fixme("SYSLOG_ACTION_READ_ALL not implemented"); + const char dummy[12] = "stub string"; + memcpy(pbufp, dummy, sizeof(dummy)); + return sizeof(dummy); + } + case linux_SYSLOG_ACTION_READ_CLEAR: + { + fixme("SYSLOG_ACTION_READ_CLEAR not implemented"); + const char dummy[12] = "stub string"; + memcpy(pbufp, dummy, sizeof(dummy)); + return sizeof(dummy); + } + case linux_SYSLOG_ACTION_CLEAR: + case linux_SYSLOG_ACTION_CONSOLE_OFF: + case linux_SYSLOG_ACTION_CONSOLE_ON: + case linux_SYSLOG_ACTION_CONSOLE_LEVEL: + case linux_SYSLOG_ACTION_SIZE_UNREAD: + case linux_SYSLOG_ACTION_SIZE_BUFFER: + default: + break; + } + + fixme("stub syslog"); + return 0; +} + static uid_t linux_getuid(SysFrm *) { return thisProcess->Security.Real.UserID; @@ -3581,7 +3633,7 @@ static SyscallData LinuxSyscallsTableAMD64[] = { [__NR_amd64_times] = {"times", (void *)nullptr}, [__NR_amd64_ptrace] = {"ptrace", (void *)nullptr}, [__NR_amd64_getuid] = {"getuid", (void *)linux_getuid}, - [__NR_amd64_syslog] = {"syslog", (void *)nullptr}, + [__NR_amd64_syslog] = {"syslog", (void *)linux_syslog}, [__NR_amd64_getgid] = {"getgid", (void *)linux_getgid}, [__NR_amd64_setuid] = {"setuid", (void *)nullptr}, [__NR_amd64_setgid] = {"setgid", (void *)nullptr}, @@ -4031,7 +4083,7 @@ static SyscallData LinuxSyscallsTableI386[] = { [__NR_i386_fstatfs] = {"fstatfs", (void *)nullptr}, [__NR_i386_ioperm] = {"ioperm", (void *)nullptr}, [__NR_i386_socketcall] = {"socketcall", (void *)nullptr}, - [__NR_i386_syslog] = {"syslog", (void *)nullptr}, + [__NR_i386_syslog] = {"syslog", (void *)linux_syslog}, [__NR_i386_setitimer] = {"setitimer", (void *)linux_setitimer}, [__NR_i386_getitimer] = {"getitimer", (void *)nullptr}, [__NR_i386_stat] = {"stat", (void *)linux_stat},