diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index 472bdc3fed..d9d0a9cea2 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -521,6 +521,9 @@ KResult VFS::link(StringView old_path, StringView new_path, Custody& base) if (!parent_inode.metadata().may_write(current->process())) return KResult(-EACCES); + if (old_inode.is_directory()) + return KResult(-EPERM); + return parent_inode.add_child(old_inode.identifier(), FileSystemPath(new_path).basename(), old_inode.mode()); } diff --git a/Userland/test_io.cpp b/Userland/test_io.cpp index 02a7053f27..e24fd0bfa5 100644 --- a/Userland/test_io.cpp +++ b/Userland/test_io.cpp @@ -255,5 +255,7 @@ int main(int, char**) test_eoverflow(); test_rmdir_while_inside_dir(); + EXPECT_ERROR_2(EPERM, link, "/", "/home/anon/lolroot"); + return 0; }