diff options
author | dzwdz | 2021-08-22 15:59:04 +0200 |
---|---|---|
committer | dzwdz | 2021-08-22 15:59:04 +0200 |
commit | e2075e56f875e077cd5c3d6e3c85368c1087654f (patch) | |
tree | e07b1fd44449fee5a01514e447af8eed15ac611c /src | |
parent | 2c0113cb72b63ba7177d14a60bcd9e51eee8e5cf (diff) |
fs_open() accepts a signed length, fixes an infinite loop
it occureed if the path_simplify returned a negative value - instead of
being interpreter as an error it just carried on, ending up in an
infinite loop.
Diffstat (limited to 'src')
-rw-r--r-- | src/init/syscalls.c | 2 | ||||
-rw-r--r-- | src/kernel/syscalls.c | 2 | ||||
-rw-r--r-- | src/kernel/syscalls.h | 2 |
3 files changed, 3 insertions, 3 deletions
diff --git a/src/init/syscalls.c b/src/init/syscalls.c index fb59bd3..0be7917 100644 --- a/src/init/syscalls.c +++ b/src/init/syscalls.c @@ -16,7 +16,7 @@ int _syscall_await(char *buf, int len) { return _syscall(_SYSCALL_AWAIT, (int)buf, (int)len, 0); } -fd_t _syscall_fs_open(const char *path, size_t len) { +fd_t _syscall_fs_open(const char *path, int len) { return _syscall(_SYSCALL_FS_OPEN, (int)path, len, 0); } diff --git a/src/kernel/syscalls.c b/src/kernel/syscalls.c index 0a88c98..ccf0a52 100644 --- a/src/kernel/syscalls.c +++ b/src/kernel/syscalls.c @@ -65,7 +65,7 @@ int _syscall_fork() { return 1; } -fd_t _syscall_fs_open(const char *path, size_t len) { +fd_t _syscall_fs_open(const char *path, int len) { struct virt_iter iter; struct vfs_mount *mount = process_current->mount; static char buffer[PATH_MAX]; // holds the path diff --git a/src/kernel/syscalls.h b/src/kernel/syscalls.h index c8dca05..f3e8dc0 100644 --- a/src/kernel/syscalls.h +++ b/src/kernel/syscalls.h @@ -33,7 +33,7 @@ int _syscall_await(char *buf, int len); */ int _syscall_fork(); -fd_t _syscall_fs_open(const char *path, size_t len); +fd_t _syscall_fs_open(const char *path, int len); int _syscall_mount(const char *path, int len, fd_t fd); /** Prints a message to the debug console. |