diff --git a/Base/usr/share/man/man2/mount.md b/Base/usr/share/man/man2/mount.md index 69918b89fa..3ece948f60 100644 --- a/Base/usr/share/man/man2/mount.md +++ b/Base/usr/share/man/man2/mount.md @@ -89,6 +89,7 @@ launch the initial userspace process. * `EBADF`: If the `source_fd` is not valid, and either `fs_type` specifies a file-backed filesystem (and not a pseudo filesystem), or `MS_BIND` is specified in flags. +* `ENOTDIR`: If `target` is not a directory. All of the usual path resolution errors may also occur. 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 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);