From 222b97488ae0939edf5e8c5541c672c0b388075f Mon Sep 17 00:00:00 2001 From: ls Date: Fri, 16 Jul 2021 21:12:07 +0200 Subject: [PATCH] VirtualFileSystem: Check for '.' '..' and empty filenames This commit adds a check, to prevent empty dot or dot-dot filenames when renaming a file and returns EINVAL in that case. --- Kernel/FileSystem/VirtualFileSystem.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index 25e1c0b904..b292fffe34 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -525,7 +525,13 @@ KResult VirtualFileSystem::rename(StringView old_path, StringView new_path, Cust if (old_parent_custody->is_readonly() || new_parent_custody->is_readonly()) return EROFS; + auto old_basename = KLexicalPath::basename(old_path); + if (old_basename.is_empty() || old_basename == "."sv || old_basename == ".."sv) + return EINVAL; + auto new_basename = KLexicalPath::basename(new_path); + if (new_basename.is_empty() || new_basename == "."sv || new_basename == ".."sv) + return EINVAL; if (!new_custody_or_error.is_error()) { auto& new_custody = *new_custody_or_error.value(); @@ -546,7 +552,7 @@ KResult VirtualFileSystem::rename(StringView old_path, StringView new_path, Cust if (auto result = new_parent_inode.add_child(old_inode, new_basename, old_inode.mode()); result.is_error()) return result; - if (auto result = old_parent_inode.remove_child(KLexicalPath::basename(old_path)); result.is_error()) + if (auto result = old_parent_inode.remove_child(old_basename); result.is_error()) return result; return KSuccess;