summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/syscall.c26
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