Ver Fonte

Kernel: Make FileDescription::create() APIs OOM safe

Brian Gianforcaro há 4 anos atrás
pai
commit
12ab0dcee0
1 ficheiros alterados com 13 adições e 4 exclusões
  1. 13 4
      Kernel/FileSystem/FileDescription.cpp

+ 13 - 4
Kernel/FileSystem/FileDescription.cpp

@@ -27,25 +27,34 @@ namespace Kernel {
 
 KResultOr<NonnullRefPtr<FileDescription>> FileDescription::create(Custody& custody)
 {
-    auto description = adopt_ref(*new FileDescription(InodeFile::create(custody.inode())));
+    auto inode_file = InodeFile::create(custody.inode());
+    if (inode_file.is_error())
+        return inode_file.error();
+
+    auto description = adopt_ref_if_nonnull(new FileDescription(*inode_file.release_value()));
+    if (!description)
+        return ENOMEM;
+
     description->m_custody = custody;
     auto result = description->attach();
     if (result.is_error()) {
         dbgln_if(FILEDESCRIPTION_DEBUG, "Failed to create file description for custody: {}", result);
         return result;
     }
-    return description;
+    return description.release_nonnull();
 }
 
 KResultOr<NonnullRefPtr<FileDescription>> FileDescription::create(File& file)
 {
-    auto description = adopt_ref(*new FileDescription(file));
+    auto description = adopt_ref_if_nonnull(new FileDescription(file));
+    if (!description)
+        return ENOMEM;
     auto result = description->attach();
     if (result.is_error()) {
         dbgln_if(FILEDESCRIPTION_DEBUG, "Failed to create file description for file: {}", result);
         return result;
     }
-    return description;
+    return description.release_nonnull();
 }
 
 FileDescription::FileDescription(File& file)