struct bch_sb_field_journal_v2 *journal = field_to_type(f, journal_v2);
        struct bch_member m = bch2_sb_member_get(sb, sb->dev_idx);
        int ret = -BCH_ERR_invalid_sb_journal;
+       u64 sum = 0;
        unsigned nr;
        unsigned i;
        struct u64_range *b;
        for (i = 0; i < nr; i++) {
                b[i].start = le64_to_cpu(journal->d[i].start);
                b[i].end = b[i].start + le64_to_cpu(journal->d[i].nr);
+
+               if (b[i].end <= b[i].start) {
+                       prt_printf(err, "journal buckets entry with bad nr: %llu+%llu",
+                                  le64_to_cpu(journal->d[i].start),
+                                  le64_to_cpu(journal->d[i].nr));
+                       goto err;
+               }
+
+               sum += le64_to_cpu(journal->d[i].nr);
        }
 
        sort(b, nr, sizeof(*b), u64_range_cmp, NULL);
                }
        }
 
+       if (sum > UINT_MAX) {
+               prt_printf(err, "too many journal buckets: %llu > %u", sum, UINT_MAX);
+               goto err;
+       }
+
        ret = 0;
 err:
        kfree(b);