]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ntfs3: handle set_blocksize failures
authorChristoph Hellwig <hch@lst.de>
Mon, 11 May 2026 07:16:54 +0000 (09:16 +0200)
committerChristian Brauner <brauner@kernel.org>
Thu, 21 May 2026 11:39:36 +0000 (13:39 +0200)
ntfs3 uses buffer_heads, which don't handle block size > PAGE_SIZE well.
Without this, mounting we will hit the

        BUG_ON(offset >= folio_size(folio));

in folio_set_bh on the first __bread_gfp call.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://patch.msgid.link/20260511071701.2456211-10-hch@lst.de
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
fs/ntfs3/super.c

index 004f599375597ef5ae4d5ffa39a52d5bcffc7b0f..3305fe406cb2239eb8253dfa5533f0026d8156f9 100644 (file)
@@ -1174,7 +1174,10 @@ read_boot:
        rec->total = cpu_to_le32(sbi->record_size);
        ((struct ATTRIB *)Add2Ptr(rec, ao))->type = ATTR_END;
 
-       sb_set_blocksize(sb, min_t(u32, sbi->cluster_size, PAGE_SIZE));
+       if (!sb_set_blocksize(sb, min_t(u32, sbi->cluster_size, PAGE_SIZE))) {
+               err = -EINVAL;
+               goto out;
+       }
 
        sbi->block_mask = sb->s_blocksize - 1;
        sbi->blocks_per_cluster = sbi->cluster_size >> sb->s_blocksize_bits;
@@ -1225,7 +1228,8 @@ out:
                        /*
                         * Try alternative boot (last sector)
                         */
-                       sb_set_blocksize(sb, block_size);
+                       if (!sb_set_blocksize(sb, block_size))
+                               return -EINVAL;
                        hint = "Alternative boot";
                        dev_size = dev_size0; /* restore original size. */
                        goto read_boot;