summaryrefslogtreecommitdiff
path: root/Kernel/Syscalls
diff options
context:
space:
mode:
authorLinus Groh <mail@linusgroh.de>2021-01-28 23:46:30 +0100
committerAndreas Kling <kling@serenityos.org>2021-01-29 08:45:56 +0100
commitb7b09470ca7f08f42b0f3a6701192adbdf198870 (patch)
tree76850a3f61492bd2b84ca95275d7cd55407ba38b /Kernel/Syscalls
parent6876b9a51497956de86a29ccc5f108b1d37e4327 (diff)
downloadserenity-b7b09470ca7f08f42b0f3a6701192adbdf198870.zip
Kernel: Return -ENOTDIR for non-directory mount target
The absence of this check allowed silly things like this: # touch file # mount /dev/hda file
Diffstat (limited to 'Kernel/Syscalls')
-rw-r--r--Kernel/Syscalls/mount.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/Kernel/Syscalls/mount.cpp b/Kernel/Syscalls/mount.cpp
index a212e1ef4a..5376563530 100644
--- a/Kernel/Syscalls/mount.cpp
+++ b/Kernel/Syscalls/mount.cpp
@@ -67,6 +67,9 @@ int Process::sys$mount(Userspace<const Syscall::SC_mount_params*> user_params)
auto& target_custody = custody_or_error.value();
+ if (!target_custody->inode().is_directory())
+ return -ENOTDIR;
+
if (params.flags & MS_REMOUNT) {
// We're not creating a new mount, we're updating an existing one!
return VFS::the().remount(target_custody, params.flags & ~MS_REMOUNT);