]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Fix shift greater than integer size
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 28 Jun 2024 23:41:00 +0000 (19:41 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Fri, 28 Jun 2024 23:42:22 +0000 (19:42 -0400)
Reported-by: syzbot+e5292b50f1957164a4b6@syzkaller.appspotmail.com
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/bkey.c

index 94a1d1982fa8890c5efb2175a95dbdbabf93ef03..587d7318a2e81aa670c0a98143afd57cf4bfde2f 100644 (file)
@@ -660,8 +660,9 @@ int bch2_bkey_format_invalid(struct bch_fs *c,
                    bch2_bkey_format_field_overflows(f, i)) {
                        unsigned unpacked_bits = bch2_bkey_format_current.bits_per_field[i];
                        u64 unpacked_max = ~((~0ULL << 1) << (unpacked_bits - 1));
-                       u64 packed_max = f->bits_per_field[i]
-                               ? ~((~0ULL << 1) << (f->bits_per_field[i] - 1))
+                       unsigned packed_bits = min(64, f->bits_per_field[i]);
+                       u64 packed_max = packed_bits
+                               ? ~((~0ULL << 1) << (packed_bits - 1))
                                : 0;
 
                        prt_printf(err, "field %u too large: %llu + %llu > %llu",