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;