ソースを参照

Ext2FS: Don't create a directory when asked to create a socket file

(mode & S_IFDIR) is not enough to check if "mode" is a directory,
we have to check all the bits in the S_IFMT mask.

Use the is_directory() helper to fix this bug.
Andreas Kling 4 年 前
コミット
f2ea6c3d4c
1 ファイル変更1 行追加1 行削除
  1. 1 1
      Kernel/FileSystem/Ext2FileSystem.cpp

+ 1 - 1
Kernel/FileSystem/Ext2FileSystem.cpp

@@ -1043,7 +1043,7 @@ bool Ext2FSInode::write_directory(const Vector<Ext2FSDirectoryEntry>& entries)
 
 
 KResultOr<NonnullRefPtr<Inode>> Ext2FSInode::create_child(const String& name, mode_t mode, dev_t dev, uid_t uid, gid_t gid)
 KResultOr<NonnullRefPtr<Inode>> Ext2FSInode::create_child(const String& name, mode_t mode, dev_t dev, uid_t uid, gid_t gid)
 {
 {
-    if (mode & S_IFDIR)
+    if (::is_directory(mode))
         return fs().create_directory(identifier(), name, mode, uid, gid);
         return fs().create_directory(identifier(), name, mode, uid, gid);
     return fs().create_inode(identifier(), name, mode, 0, dev, uid, gid);
     return fs().create_inode(identifier(), name, mode, 0, dev, uid, gid);
 }
 }