bcachefs: Fix invalid shift in member_to_text()
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 12 Oct 2024 02:06:58 +0000 (22:06 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 12 Oct 2024 07:02:16 +0000 (03:02 -0400)
Reported-by: syzbot+064ce437a1ad63d3f6ef@syzkaller.appspotmail.com
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/sb-members.c

index 02bcde3..fb08dd6 100644 (file)
@@ -163,6 +163,11 @@ static int validate_member(struct printbuf *err,
                return -BCH_ERR_invalid_sb_members;
        }
 
+       if (m.btree_bitmap_shift >= 64) {
+               prt_printf(err, "device %u: invalid btree_bitmap_shift %u", i, m.btree_bitmap_shift);
+               return -BCH_ERR_invalid_sb_members;
+       }
+
        return 0;
 }
 
@@ -247,7 +252,10 @@ static void member_to_text(struct printbuf *out,
        prt_newline(out);
 
        prt_printf(out, "Btree allocated bitmap blocksize:\t");
-       prt_units_u64(out, 1ULL << m.btree_bitmap_shift);
+       if (m.btree_bitmap_shift < 64)
+               prt_units_u64(out, 1ULL << m.btree_bitmap_shift);
+       else
+               prt_printf(out, "(invalid shift %u)", m.btree_bitmap_shift);
        prt_newline(out);
 
        prt_printf(out, "Btree allocated bitmap:\t");