]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
exfat: fix divide-by-zero in exfat_allocate_bitmap
authorNamjae Jeon <linkinjeon@kernel.org>
Tue, 18 Nov 2025 02:10:26 +0000 (11:10 +0900)
committerNamjae Jeon <linkinjeon@kernel.org>
Wed, 3 Dec 2025 01:00:16 +0000 (10:00 +0900)
The variable max_ra_count can be 0 in exfat_allocate_bitmap(),
which causes a divide-by-zero error in the subsequent modulo operation
(i % max_ra_count), leading to a system crash.
When max_ra_count is 0, it means that readahead is not used. This patch
load the bitmap without readahead.

Fixes: 9fd688678dd8 ("exfat: optimize allocation bitmap loading time")
Reported-by: Jiaming Zhang <r772577952@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/exfat/balloc.c

index b387bf7df65e85b06a2aa5b64c91580e60061873..5429041c7eaf94de6533e634d1dba1bba2476a70 100644 (file)
@@ -106,7 +106,7 @@ static int exfat_allocate_bitmap(struct super_block *sb,
                (PAGE_SHIFT - sb->s_blocksize_bits);
        for (i = 0; i < sbi->map_sectors; i++) {
                /* Trigger the next readahead in advance. */
-               if (0 == (i % max_ra_count)) {
+               if (max_ra_count && 0 == (i % max_ra_count)) {
                        blk_start_plug(&plug);
                        for (j = i; j < min(max_ra_count, sbi->map_sectors - i) + i; j++)
                                sb_breadahead(sb, sector + j);