[PATCH v3 10/10] ext4: Check for overflow when allocating tables
Simon Glass
sjg at chromium.org
Sat May 10 15:06:16 CEST 2025
An overflow could cause too little memory to be allocated, thus
potentially causing undefined behaviour. Add a check for overflow.
Since blk_bmaps and inode_bmaps use the same size, share the variable.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
(no changes since v2)
Changes in v2:
- Use Linux macros instead of gcc built-ins
fs/ext4/ext4_write.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/fs/ext4/ext4_write.c b/fs/ext4/ext4_write.c
index a48d1fd26be..a9a53214dce 100644
--- a/fs/ext4/ext4_write.c
+++ b/fs/ext4/ext4_write.c
@@ -607,6 +607,7 @@ int ext4fs_init(void)
int i;
uint32_t real_free_blocks = 0;
struct ext_filesystem *fs = get_fs();
+ size_t alloc_size;
/* check for a reasonable block size, no more than 64K */
if (LOG2_BLOCK_SIZE(ext4fs_root) > 16)
@@ -643,7 +644,9 @@ int ext4fs_init(void)
}
/* load all the available bitmap block of the partition */
- fs->blk_bmaps = zalloc(fs->no_blkgrp * sizeof(char *));
+ if (check_mul_overflow(fs->no_blkgrp, sizeof(char *), &alloc_size))
+ goto fail;
+ fs->blk_bmaps = zalloc(alloc_size);
if (!fs->blk_bmaps)
goto fail;
for (i = 0; i < fs->no_blkgrp; i++) {
@@ -663,7 +666,7 @@ int ext4fs_init(void)
}
/* load all the available inode bitmap of the partition */
- fs->inode_bmaps = zalloc(fs->no_blkgrp * sizeof(unsigned char *));
+ fs->inode_bmaps = zalloc(alloc_size);
if (!fs->inode_bmaps)
goto fail;
for (i = 0; i < fs->no_blkgrp; i++) {
--
2.43.0
More information about the U-Boot
mailing list