From 1bef1e3dee23a557554493f79c1111f75d142bbb Mon Sep 17 00:00:00 2001 From: Matheus Date: Mon, 29 Aug 2022 00:22:22 -0300 Subject: [PATCH] syscalls: stat: make return values sane and fix check --- src/sys/syscalls/stat.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/sys/syscalls/stat.c b/src/sys/syscalls/stat.c index b5ac5cf9..9e09b28c 100644 --- a/src/sys/syscalls/stat.c +++ b/src/sys/syscalls/stat.c @@ -9,9 +9,9 @@ #include syscallret syscall_stat(const char* path, stat* st){ - - syscallret retv; + syscallret retv; retv.ret = -1; + if(st > USER_SPACE_END || path > USER_SPACE_END){ retv.errno = EFAULT; return retv; @@ -19,7 +19,7 @@ syscallret syscall_stat(const char* path, stat* st){ char* kpath = alloc(strlen(path)); // XXX use proper user strlen func - if(!path){ + if(!kpath){ retv.errno = ENOMEM; return retv; } @@ -32,6 +32,7 @@ syscallret syscall_stat(const char* path, stat* st){ int ret = vfs_open(&file, *kpath == '/' ? proc->root : proc->cwd, kpath); + if(ret){ retv.errno = ret; goto _ret; @@ -42,7 +43,9 @@ syscallret syscall_stat(const char* path, stat* st){ vfs_close(file); memcpy(st, &stbuff, sizeof(stat)); // XXX use user memcpy - + + retv.ret = 0; + retv.errno = 0; _ret: free(kpath); return retv;