An overflow could cause too little memory to be allocated, thus
potentially causing undefined behaviour. Add a check for overflow.

Signed-off-by: Simon Glass <s...@chromium.org>
---

(no changes since v1)

 fs/ext4/ext4_write.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/fs/ext4/ext4_write.c b/fs/ext4/ext4_write.c
index 86420d1c9d7..ae26354fbb2 100644
--- a/fs/ext4/ext4_write.c
+++ b/fs/ext4/ext4_write.c
@@ -25,6 +25,7 @@
 #include <malloc.h>
 #include <memalign.h>
 #include <part.h>
+#include <linux/overflow.h>
 #include <linux/stat.h>
 #include <div64.h>
 #include "ext4_common.h"
@@ -111,7 +112,8 @@ int ext4fs_get_bgdtable(void)
        size_t alloc_size;
        int gdsize_total;
 
-       alloc_size = fs->no_blkgrp * fs->gdsize;
+       if (check_mul_overflow(fs->no_blkgrp, fs->gdsize, &alloc_size))
+               return -1;
        gdsize_total = ROUND(alloc_size, fs->blksz);
        fs->no_blk_pergdt = gdsize_total / fs->blksz;
 
-- 
2.43.0

Reply via email to