]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
Fix UBSAN if s_log_groups_per_flex is 31
authorTheodore Ts'o <tytso@mit.edu>
Sun, 7 Aug 2022 23:47:25 +0000 (19:47 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 7 Aug 2022 23:49:33 +0000 (19:49 -0400)
It is logal (albeit rare) for the number of block groups per flex_bg
to 2**31 (which effectively means to put all of the block groups into
a single flex_bg).  However, in that case "1 << 31" is undefined on
architectures with a 32-bit integer.  Fix this UBSAN complaint by
using "1U << 31" instead.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
e2fsck/pass1.c
lib/e2p/ls.c
lib/ext2fs/alloc_tables.c
lib/ext2fs/mkjournal.c
lib/ext2fs/rw_bitmaps.c
misc/e4defrag.c
resize/main.c
resize/resize2fs.c

index 43972e7c6defa6f40e7b8b5dd4aec6a310d8a535..37c5b10269fa3dece4497843387eecc927b54312 100644 (file)
@@ -4067,7 +4067,7 @@ static void new_table_block(e2fsck_t ctx, blk64_t first_block, dgrp_t group,
         */
        is_flexbg = ext2fs_has_feature_flex_bg(fs->super);
        if (is_flexbg) {
-               flexbg_size = 1 << fs->super->s_log_groups_per_flex;
+               flexbg_size = 1U << fs->super->s_log_groups_per_flex;
                flexbg = group / flexbg_size;
                first_block = ext2fs_group_first_block2(fs,
                                                        flexbg_size * flexbg);
index 176bee0fd19fa118fa229dcc365e42df391f4d48..9511d2c7a51df59ab25f4468ecc10a1321809e2f 100644 (file)
@@ -312,7 +312,7 @@ void list_super2(struct ext2_super_block * sb, FILE *f)
                        sb->s_first_meta_bg);
        if (sb->s_log_groups_per_flex)
                fprintf(f, "Flex block group size:    %u\n",
-                       1 << sb->s_log_groups_per_flex);
+                       1U << sb->s_log_groups_per_flex);
        if (sb->s_mkfs_time) {
                tm = sb->s_mkfs_time;
                fprintf(f, "Filesystem created:       %s", ctime(&tm));
index 971a6ceb58306fb11a913a264c8afaf70c384fe2..e8a1fef0e210649ffd953ee5a472d8eb24bd0315 100644 (file)
@@ -43,7 +43,7 @@ static blk64_t flexbg_offset(ext2_filsys fs, dgrp_t group, blk64_t start_blk,
        blk64_t         last_blk, first_free = 0;
        dgrp_t          last_grp;
 
-       flexbg_size = 1 << fs->super->s_log_groups_per_flex;
+       flexbg_size = 1U << fs->super->s_log_groups_per_flex;
        flexbg = group / flexbg_size;
        size = rem_grp * elem_size;
 
@@ -97,7 +97,7 @@ errcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group,
 
        if (ext2fs_has_feature_flex_bg(fs->super) &&
            fs->super->s_log_groups_per_flex) {
-               flexbg_size = 1 << fs->super->s_log_groups_per_flex;
+               flexbg_size = 1U << fs->super->s_log_groups_per_flex;
                last_grp = group | (flexbg_size - 1);
                if (last_grp > fs->group_desc_count-1)
                        last_grp = fs->group_desc_count-1;
index 11d73e3009438e12aa0d9c55fbaf3cff47f119b0..54772dd50e35498398a22b12b0a4386d1fd21cf6 100644 (file)
@@ -252,7 +252,7 @@ static blk64_t get_midpoint_journal_block(ext2_filsys fs)
 
        group = ext2fs_group_of_blk2(fs, (ext2fs_blocks_count(fs->super) -
                                         fs->super->s_first_data_block) / 2);
-       log_flex = 1 << fs->super->s_log_groups_per_flex;
+       log_flex = 1U << fs->super->s_log_groups_per_flex;
        if (fs->super->s_log_groups_per_flex && (group > log_flex)) {
                group = group & ~(log_flex - 1);
                while ((group < fs->group_desc_count) &&
index 1f38010bbc58b05b5c6cc852d84293837bd0f849..b9e38730203f406ca9cf039e6d3c4517a57a9e55 100644 (file)
@@ -527,7 +527,7 @@ errcode_t ext2fs_rw_bitmaps(ext2_filsys fs, int flags, int num_threads)
        pthread_mutex_t rbt_mutex = PTHREAD_MUTEX_INITIALIZER;
        errcode_t retval;
        errcode_t rc;
-       unsigned flexbg_size = 1 << fs->super->s_log_groups_per_flex;
+       unsigned flexbg_size = 1U << fs->super->s_log_groups_per_flex;
        dgrp_t average_group;
        int i, tail_flags = 0;
 #endif
index 86e97ee3ae40b014375cb91983df1e2155e7a832..9ec265f2e1b29a5c5bb704190f5e18b4cf4957e7 100644 (file)
@@ -1021,7 +1021,7 @@ static int get_best_count(ext4_fsblk_t block_count)
                return 1;
 
        if (feature_incompat & EXT4_FEATURE_INCOMPAT_FLEX_BG) {
-               flex_bg_num = 1 << log_groups_per_flex;
+               flex_bg_num = 1U << log_groups_per_flex;
                ret = ((block_count - 1) /
                        ((ext4_fsblk_t)blocks_per_group *
                                flex_bg_num)) + 1;
index bceaa1677e21014c11eed24fbda083e9540930a6..c1338fbe1e87c884ecabfa624d9fae2e354dbae0 100644 (file)
@@ -111,8 +111,8 @@ static void determine_fs_stride(ext2_filsys fs)
        unsigned int    group;
        unsigned long long sum;
        unsigned int    has_sb, prev_has_sb = 0, num;
+       unsigned int    flexbg_size = 1U << fs->super->s_log_groups_per_flex;
        int             i_stride, b_stride;
-       int             flexbg_size = 1 << fs->super->s_log_groups_per_flex;
 
        if (fs->stride)
                return;
index cfc81fc78fe0bb6a4a0e4487dc5c86f09e0ea623..243cd777d8b0dfa9cf5c472d3a82e3159a5daf35 100644 (file)
@@ -2973,7 +2973,7 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags)
        blk64_t grp, data_needed, last_start;
        blk64_t overhead = 0;
        int old_desc_blocks;
-       int flexbg_size = 1 << fs->super->s_log_groups_per_flex;
+       unsigned flexbg_size = 1U << fs->super->s_log_groups_per_flex;
 
        /*
         * first figure out how many group descriptors we need to