diff --git a/fs/bcachefs/journal.c b/fs/bcachefs/journal.c index 13669dd0e375..d6970d834991 100644 --- a/fs/bcachefs/journal.c +++ b/fs/bcachefs/journal.c @@ -1307,8 +1307,18 @@ int bch2_dev_journal_init(struct bch_dev *ca, struct bch_sb *sb) if (journal_buckets_v2) { unsigned nr = bch2_sb_field_journal_v2_nr_entries(journal_buckets_v2); - for (unsigned i = 0; i < nr; i++) + for (unsigned i = 0; i < nr; i++) { ja->nr += le64_to_cpu(journal_buckets_v2->d[i].nr); + if (le64_to_cpu(journal_buckets_v2->d[i].nr) > UINT_MAX) { + struct bch_fs *c = ca->fs; + struct printbuf buf = PRINTBUF; + prt_printf(&buf, "v2d[%u]: %lu overflow!\n", i, + le64_to_cpu(journal_buckets_v2->d[i].nr)); + bch_info(c, "%s", buf.buf); + printbuf_exit(&buf); + return -BCH_ERR_ENOMEM_dev_journal_init; + } + } } else if (journal_buckets) { ja->nr = bch2_nr_journal_buckets(journal_buckets); }