diff --git a/kernel-src/sys/syscalls/execve.c b/kernel-src/sys/syscalls/execve.c index 09b3d4f2..b8222088 100644 --- a/kernel-src/sys/syscalls/execve.c +++ b/kernel-src/sys/syscalls/execve.c @@ -76,7 +76,7 @@ syscallret_t syscall_execve(context_t *context, char *upath, char *uargv[], char refnode = *path == '/' ? sched_getroot() : sched_getcwd(); - ret.errno = vfs_lookup(&node, vfsroot, path, NULL, 0); + ret.errno = vfs_lookup(&node, refnode, path, NULL, 0); if (ret.errno) goto error; @@ -92,7 +92,7 @@ syscallret_t syscall_execve(context_t *context, char *upath, char *uargv[], char if (interp) { vnode_t *interpnode; - ret.errno = vfs_open(vfsroot, interp, 0, &interpnode); + ret.errno = vfs_lookup(&interpnode, refnode, interp, NULL, 0); if (ret.errno) goto error; @@ -103,6 +103,7 @@ syscallret_t syscall_execve(context_t *context, char *upath, char *uargv[], char goto error; __assert(interpinterp == NULL); + VOP_RELEASE(interpnode); } void *stack = elf_preparestack(STACK_TOP, &auxv64, argv, envp); diff --git a/kernel-src/sys/syscalls/stat.c b/kernel-src/sys/syscalls/stat.c index fa78ddb4..bfa2fc87 100644 --- a/kernel-src/sys/syscalls/stat.c +++ b/kernel-src/sys/syscalls/stat.c @@ -99,6 +99,7 @@ syscallret_t syscall_fstatat(context_t *ctx, int dirfd, char *upath, stat_t *ust // TODO safe memcpy *ustat = buf; + ret.ret = 0; cleanup: if (node)