From dbbc378fb2be2fb0f5fe8f767d25b6caf65df3c3 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Thu, 28 Jan 2021 23:54:29 +0100 Subject: [PATCH] Kernel: Return -ENOTBLK for non-block device Ext2FS mount source When mounting an Ext2FS, a block device source is required. All other filesystem types are unaffected, as most of them ignore the source file descriptor anyway. Fixes #5153. --- Base/usr/share/man/man2/mount.md | 2 ++ Kernel/Syscalls/mount.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Base/usr/share/man/man2/mount.md b/Base/usr/share/man/man2/mount.md index 3ece948f60..26b4c26710 100644 --- a/Base/usr/share/man/man2/mount.md +++ b/Base/usr/share/man/man2/mount.md @@ -90,6 +90,8 @@ launch the initial userspace process. file-backed filesystem (and not a pseudo filesystem), or `MS_BIND` is specified in flags. * `ENOTDIR`: If `target` is not a directory. +* `ENOTBLK`: If the `source_fd` is not a block device, but one is required (i.e. + when `fs_type` is `Ext2FS`) All of the usual path resolution errors may also occur. diff --git a/Kernel/Syscalls/mount.cpp b/Kernel/Syscalls/mount.cpp index 5376563530..30df65543b 100644 --- a/Kernel/Syscalls/mount.cpp +++ b/Kernel/Syscalls/mount.cpp @@ -91,6 +91,8 @@ int Process::sys$mount(Userspace user_params) if (fs_type == "ext2" || fs_type == "Ext2FS") { if (description.is_null()) return -EBADF; + if (!description->file().is_block_device()) + return -ENOTBLK; if (!description->file().is_seekable()) { dbgln("mount: this is not a seekable file"); return -ENODEV;