Browse Source

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.
Linus Groh 4 years ago
parent
commit
dbbc378fb2
2 changed files with 4 additions and 0 deletions
  1. 2 0
      Base/usr/share/man/man2/mount.md
  2. 2 0
      Kernel/Syscalls/mount.cpp

+ 2 - 0
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.
 

+ 2 - 0
Kernel/Syscalls/mount.cpp

@@ -91,6 +91,8 @@ int Process::sys$mount(Userspace<const Syscall::SC_mount_params*> 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;