diff options
Diffstat (limited to 'sys/syscall.c')
| -rw-r--r-- | sys/syscall.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/sys/syscall.c b/sys/syscall.c index 5670bbb..f41f3f6 100644 --- a/sys/syscall.c +++ b/sys/syscall.c @@ -44,8 +44,8 @@ static const syscall_handle_t s_syscall_handles[128] = { [JOVE_OBJ_OBJDIR] = _syscall_handle_objdir, [JOVE_OBJ_PAGEDIR] = _syscall_handle_generic, [JOVE_OBJ_PROCESSOR] = _syscall_handle_generic, + [JOVE_OBJ_HWMEMORY] = _syscall_handle_generic, [JOVE_OBJ_PROCESS] = _syscall_handle_generic, - [JOVE_OBJ_ACPI_TABLE] = _syscall_handle_generic, [JOVE_OBJ_INT_HANDLE] = _syscall_handle_generic, [JOVE_OBJ_INITRD_FILE] = _syscall_handle_generic, [JOVE_OBJ_FRAMEBUFFER] = _syscall_handle_generic, @@ -67,19 +67,19 @@ syscall_handler(uintmax_t message_path_raw, uint16_t message_pathlen) jove_owned_obj_t *objdir = pcb_rootdir(pcb); jove_owned_obj_t *message_obj = objdir_trygetobj(objdir, message_path, message_pathlen); + int sysret = 0; + 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)); + sysret = -errno; goto release_premsg; - return errno; } - int sysret = 0; - if(obj_gettype_linked(message_obj) != JOVE_OBJ_MESSAGE) { klogf("Process %i tried to call syscall with invalid object %P\n", pcb_pid(pcb), message_path, message_pathlen); - sysret = EBADOBJ; + sysret = -EBADOBJ; goto release_return; } @@ -91,7 +91,7 @@ syscall_handler(uintmax_t message_path_raw, uint16_t message_pathlen) if(bytes_needed > messagelen) { //Target path exceeds message length. klogf("Process %i tried to call syscall with target path too big for message.\n", pcb_pid(pcb)); - sysret = ETOOSMALL; + sysret = -ETOOSMALL; goto release_return; } jove_owned_obj_t *target = objdir_trygetobj(objdir, header->path, header->pathlen); @@ -99,7 +99,7 @@ syscall_handler(uintmax_t message_path_raw, uint16_t message_pathlen) //Could not find payload target in pcb rootdir. 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; + sysret = -errno; goto release_return; } @@ -114,7 +114,7 @@ syscall_handler(uintmax_t message_path_raw, uint16_t message_pathlen) if(call_handle == NULL) { 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; + sysret = -EBADOBJ; }else sysret = call_handle( pcb_obj, objdir, message_obj, target, |
