summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Gianforcaro <bgianf@serenityos.org>2021-04-30 03:21:05 -0700
committerLinus Groh <mail@linusgroh.de>2021-05-01 09:10:30 +0200
commitf05086a5d2d4e070bfedd431287de335890a9be2 (patch)
treebd4798561672fc4812e48430b8bda2ae1bb362df
parent2ee1731966427b8ce17246a4f8254f91f885ea98 (diff)
downloadserenity-f05086a5d2d4e070bfedd431287de335890a9be2.zip
Kernel: Harden Ext2FileSystem Vector usage against OOM.
-rw-r--r--Kernel/FileSystem/Ext2FileSystem.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/Kernel/FileSystem/Ext2FileSystem.cpp b/Kernel/FileSystem/Ext2FileSystem.cpp
index 094f721273..d9b1a69b02 100644
--- a/Kernel/FileSystem/Ext2FileSystem.cpp
+++ b/Kernel/FileSystem/Ext2FileSystem.cpp
@@ -904,7 +904,8 @@ KResult Ext2FSInode::resize(u64 new_size)
auto blocks_or_error = fs().allocate_blocks(fs().group_index_from_inode(index()), blocks_needed_after - blocks_needed_before);
if (blocks_or_error.is_error())
return blocks_or_error.error();
- m_block_list.append(blocks_or_error.release_value());
+ if (!m_block_list.try_append(blocks_or_error.release_value()))
+ return ENOMEM;
} else if (blocks_needed_after < blocks_needed_before) {
if constexpr (EXT2_VERY_DEBUG) {
dbgln("Ext2FSInode[{}]::resize(): Shrinking inode, old block list is {} entries:", identifier(), m_block_list.size());
@@ -1451,7 +1452,8 @@ KResultOr<Ext2FS::CachedBitmap*> Ext2FS::get_bitmap_block(BlockIndex bitmap_bloc
dbgln("Ext2FS: Failed to load bitmap block {}", bitmap_block_index);
return result;
}
- m_cached_bitmaps.append(make<CachedBitmap>(bitmap_block_index, move(block)));
+ if (!m_cached_bitmaps.try_append(make<CachedBitmap>(bitmap_block_index, move(block))))
+ return ENOMEM;
return m_cached_bitmaps.last();
}