From d4d17ce4235ffd89e081250df94ace8054c3436b Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 15 Jan 2020 22:10:38 +0100 Subject: [PATCH] Kernel: Trying to sys$link() a directory should fail with EPERM --- Kernel/FileSystem/VirtualFileSystem.cpp | 3 +++ Userland/test_io.cpp | 2 ++ 2 files changed, 5 insertions(+) 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; }