mirror of
https://github.com/RGBCube/serenity
synced 2025-05-29 17:45:11 +00:00
Kernel+Base: Introduce MS_NOREGULAR mount flag
This flag doesn't conform to any POSIX standard nor is found in any OS out there. The idea behind this mount flag is to ensure that only non-regular files will be placed in a filesystem, which includes device nodes, symbolic links, directories, FIFOs and sockets. Currently, the only valid case for using this mount flag is for TmpFS instances, where we want to mount a TmpFS but disallow any kind of regular file and only allow other types of files on the filesystem.
This commit is contained in:
parent
97f8927da6
commit
07387ec19a
3 changed files with 7 additions and 0 deletions
|
@ -263,6 +263,9 @@ ErrorOr<NonnullLockRefPtr<OpenFileDescription>> VirtualFileSystem::open(Credenti
|
|||
auto& inode = custody.inode();
|
||||
auto metadata = inode.metadata();
|
||||
|
||||
if (metadata.is_regular_file() && (custody.mount_flags() & MS_NOREGULAR))
|
||||
return EACCES;
|
||||
|
||||
if ((options & O_DIRECTORY) && !metadata.is_directory())
|
||||
return ENOTDIR;
|
||||
|
||||
|
@ -370,6 +373,8 @@ ErrorOr<NonnullLockRefPtr<OpenFileDescription>> VirtualFileSystem::create(Creden
|
|||
return EACCES;
|
||||
if (parent_custody.is_readonly())
|
||||
return EROFS;
|
||||
if (is_regular_file(mode) && (parent_custody.mount_flags() & MS_NOREGULAR))
|
||||
return EACCES;
|
||||
|
||||
dbgln_if(VFS_DEBUG, "VirtualFileSystem::create: '{}' in {}", basename, parent_inode.identifier());
|
||||
auto uid = owner.has_value() ? owner.value().uid : credentials.euid();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue