summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordzwdz2021-08-22 15:59:04 +0200
committerdzwdz2021-08-22 15:59:04 +0200
commite2075e56f875e077cd5c3d6e3c85368c1087654f (patch)
treee07b1fd44449fee5a01514e447af8eed15ac611c /src
parent2c0113cb72b63ba7177d14a60bcd9e51eee8e5cf (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.c2
-rw-r--r--src/kernel/syscalls.c2
-rw-r--r--src/kernel/syscalls.h2
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.