mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 15:08:21 +00:00
execve: fix lookup refs and release iterpreter vnode
This commit is contained in:
@@ -76,7 +76,7 @@ syscallret_t syscall_execve(context_t *context, char *upath, char *uargv[], char
|
|||||||
|
|
||||||
refnode = *path == '/' ? sched_getroot() : sched_getcwd();
|
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)
|
if (ret.errno)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ syscallret_t syscall_execve(context_t *context, char *upath, char *uargv[], char
|
|||||||
|
|
||||||
if (interp) {
|
if (interp) {
|
||||||
vnode_t *interpnode;
|
vnode_t *interpnode;
|
||||||
ret.errno = vfs_open(vfsroot, interp, 0, &interpnode);
|
ret.errno = vfs_lookup(&interpnode, refnode, interp, NULL, 0);
|
||||||
if (ret.errno)
|
if (ret.errno)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
@@ -103,6 +103,7 @@ syscallret_t syscall_execve(context_t *context, char *upath, char *uargv[], char
|
|||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
__assert(interpinterp == NULL);
|
__assert(interpinterp == NULL);
|
||||||
|
VOP_RELEASE(interpnode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *stack = elf_preparestack(STACK_TOP, &auxv64, argv, envp);
|
void *stack = elf_preparestack(STACK_TOP, &auxv64, argv, envp);
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ syscallret_t syscall_fstatat(context_t *ctx, int dirfd, char *upath, stat_t *ust
|
|||||||
|
|
||||||
// TODO safe memcpy
|
// TODO safe memcpy
|
||||||
*ustat = buf;
|
*ustat = buf;
|
||||||
|
ret.ret = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (node)
|
if (node)
|
||||||
|
|||||||
Reference in New Issue
Block a user