From d89a823924d2a7e6d9131acc62ac38c7dec56938 Mon Sep 17 00:00:00 2001 From: apio Date: Fri, 26 May 2023 20:49:13 +0200 Subject: [PATCH] kernel: Return EACCES when trying to chdir to an unaccessible directory --- kernel/src/sys/chdir.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/src/sys/chdir.cpp b/kernel/src/sys/chdir.cpp index 9bf67389..1bdd8a17 100644 --- a/kernel/src/sys/chdir.cpp +++ b/kernel/src/sys/chdir.cpp @@ -14,6 +14,7 @@ Result sys_chdir(Registers*, SyscallArgs args) SharedPtr inode = TRY(VFS::resolve_path(path.chars(), current->auth)); if (inode->type() != VFS::InodeType::Directory) return err(ENOTDIR); + if (!VFS::can_execute(inode, current->auth)) return err(EACCES); inode->add_handle(); if (current->current_directory) current->current_directory->remove_handle(); @@ -28,6 +29,7 @@ Result sys_chdir(Registers*, SyscallArgs args) SharedPtr inode = TRY(VFS::resolve_path(path.chars(), current->auth, current->current_directory)); if (inode->type() != VFS::InodeType::Directory) return err(ENOTDIR); + if (!VFS::can_execute(inode, current->auth)) return err(EACCES); auto old_wdir = current->current_directory_path.view();