diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-09-17 11:11:20 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-09-17 11:11:20 -0400 |
| commit | 13adbc58eb9f5eb5d6f0e4454bd005e9adbb47c8 (patch) | |
| tree | a15e55bc70c60d3faa053db3b7b9a17fe75589bc /sys/syscall.c | |
| parent | a783cc865f1f261c20f6ef55cb37d4839f519865 (diff) | |
| download | jove-kernel-13adbc58eb9f5eb5d6f0e4454bd005e9adbb47c8.tar.gz jove-kernel-13adbc58eb9f5eb5d6f0e4454bd005e9adbb47c8.tar.bz2 jove-kernel-13adbc58eb9f5eb5d6f0e4454bd005e9adbb47c8.zip | |
make syscall use non-locking mutexes
Diffstat (limited to 'sys/syscall.c')
| -rw-r--r-- | sys/syscall.c | 26 |
1 files changed, 15 insertions, 11 deletions
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 |
