From ee84b8a845176701ed8fc90076795bae841044c2 Mon Sep 17 00:00:00 2001 From: Brian Gianforcaro Date: Fri, 30 Apr 2021 03:14:29 -0700 Subject: [PATCH] Kernel: Harden DevFS Vector usage against OOM. The dance here is not complicated, but it is something that should be taken note of. Since we append to both lists, we don't want to orphan the new Inode in the m_links/m_subfolders Vector in the event that the append to m_parent_fs.m_nodes fails. --- Kernel/FileSystem/DevFS.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Kernel/FileSystem/DevFS.cpp b/Kernel/FileSystem/DevFS.cpp index cab9e86326..71025d1d8c 100644 --- a/Kernel/FileSystem/DevFS.cpp +++ b/Kernel/FileSystem/DevFS.cpp @@ -275,6 +275,10 @@ KResultOr> DevFSRootDirectoryInode::create_child(const Stri if (name != "pts") return EROFS; auto new_directory_inode = adopt_ref(*new DevFSPtsDirectoryInode(m_parent_fs)); + if (!m_subfolders.try_ensure_capacity(m_subfolders.size() + 1)) + return ENOMEM; + if (!m_parent_fs.m_nodes.try_ensure_capacity(m_parent_fs.m_nodes.size() + 1)) + return ENOMEM; m_subfolders.append(new_directory_inode); m_parent_fs.m_nodes.append(new_directory_inode); return KResult(KSuccess); @@ -285,6 +289,10 @@ KResultOr> DevFSRootDirectoryInode::create_child(const Stri return EEXIST; } auto new_link_inode = adopt_ref(*new DevFSLinkInode(m_parent_fs, name)); + if (!m_links.try_ensure_capacity(m_links.size() + 1)) + return ENOMEM; + if (!m_parent_fs.m_nodes.try_ensure_capacity(m_parent_fs.m_nodes.size() + 1)) + return ENOMEM; m_links.append(new_link_inode); m_parent_fs.m_nodes.append(new_link_inode); return new_link_inode;