From 13adbc58eb9f5eb5d6f0e4454bd005e9adbb47c8 Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Thu, 17 Sep 2026 11:11:20 -0400 Subject: make syscall use non-locking mutexes --- sys/syscall.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'sys/syscall.c') diff --git a/sys/syscall.c b/sys/syscall.c index 0351c95..5670bbb 100644 --- a/sys/syscall.c +++ b/sys/syscall.c @@ -34,7 +34,7 @@ _syscall_handle_generic( void *payload) { pcb_t *pcb = obj_deref(pcb_obj); - kprintf("syscall: Process %i encountered stub syscall on object %P\n", pcb_pid(pcb), header->path, header->pathlen); + klogf("Process %i encountered stub syscall on object %P\n", pcb_pid(pcb), header->path, header->pathlen); return EBADOBJ; } @@ -65,16 +65,20 @@ syscall_handler(uintmax_t message_path_raw, uint16_t message_pathlen) jove_owned_obj_t *pcb_obj = process_current(); pcb_t *pcb = obj_deref(pcb_obj); jove_owned_obj_t *objdir = pcb_rootdir(pcb); - jove_owned_obj_t *message_obj = objdir_getobj(objdir, message_path, message_pathlen); + jove_owned_obj_t *message_obj = objdir_trygetobj(objdir, message_path, message_pathlen); - int sysret = 0; - if(message_obj == 0) { - sysret = errno; + if(message_obj == NULL) { + klogf("Process %i tried to call syscall with bad message %P : %s\n", + pcb_pid(pcb), message_path, message_pathlen, errstr(errno)); goto release_premsg; + return errno; } + int sysret = 0; + if(obj_gettype_linked(message_obj) != JOVE_OBJ_MESSAGE) { - kprintf("syscall: Process %i tried to call syscall with invalid object: %P\n", pcb_pid(pcb), message_path, message_pathlen); + klogf("Process %i tried to call syscall with invalid object %P\n", + pcb_pid(pcb), message_path, message_pathlen); sysret = EBADOBJ; goto release_return; } @@ -86,15 +90,15 @@ syscall_handler(uintmax_t message_path_raw, uint16_t message_pathlen) size_t bytes_needed = sizeof(struct syscall_header) + header->pathlen * 2; if(bytes_needed > messagelen) { //Target path exceeds message length. - kprintf("syscall: Process %i tried to call syscall with target path too big for message.\n", pcb_pid(pcb)); + klogf("Process %i tried to call syscall with target path too big for message.\n", pcb_pid(pcb)); sysret = ETOOSMALL; goto release_return; } - jove_owned_obj_t *target = objdir_getobj(objdir, header->path, header->pathlen); + jove_owned_obj_t *target = objdir_trygetobj(objdir, header->path, header->pathlen); if(target == 0) { //Could not find payload target in pcb rootdir. - kprintf("syscall: Process %i tried to call syscall with bad target path %P\n", - pcb_pid(pcb), header->path, header->pathlen); + klogf("Process %i tried to call syscall with bad target path %P : %s\n", + pcb_pid(pcb), header->path, header->pathlen, errstr(errno)); sysret = errno; goto release_return; } @@ -108,7 +112,7 @@ syscall_handler(uintmax_t message_path_raw, uint16_t message_pathlen) }else{ syscall_handle_t call_handle = s_syscall_handles[obj_gettype(target)]; if(call_handle == NULL) { - kprintf("syscall: Process %i tried to call syscall on object %P which doesn't support syscalls!\n", + klogf("Process %i tried to call syscall on object %P which doesn't support syscalls!\n", pcb_pid(pcb), header->path, header->pathlen); sysret = EBADOBJ; }else -- cgit v1.2.3