From: Kent Overstreet Date: Thu, 28 Feb 2019 00:14:23 +0000 (-0500) Subject: bcachefs: fix integer underflow in journal code X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=8db2acde2fca80954b4db12977182aa44b1e85fe;p=linux.git bcachefs: fix integer underflow in journal code Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/journal.c b/fs/bcachefs/journal.c index 91d0e5d443ed0..3a60402440640 100644 --- a/fs/bcachefs/journal.c +++ b/fs/bcachefs/journal.c @@ -256,6 +256,8 @@ static int journal_entry_open(struct journal *j) do { old.v = new.v = v; + EBUG_ON(journal_state_count(new, new.idx)); + if (old.cur_entry_offset == JOURNAL_ENTRY_ERROR_VAL) return -EROFS; @@ -429,7 +431,7 @@ void bch2_journal_entry_res_resize(struct journal *j, if (d <= 0) goto out; - j->cur_entry_u64s -= d; + j->cur_entry_u64s = max_t(int, 0, j->cur_entry_u64s - d); smp_mb(); state = READ_ONCE(j->reservations); diff --git a/fs/bcachefs/journal.h b/fs/bcachefs/journal.h index 4acb0f59396de..77d59fb0b1513 100644 --- a/fs/bcachefs/journal.h +++ b/fs/bcachefs/journal.h @@ -292,6 +292,8 @@ static inline int journal_res_get_fast(struct journal *j, if (new.cur_entry_offset + res->u64s > j->cur_entry_u64s) return 0; + EBUG_ON(!journal_state_count(new, new.idx)); + if (flags & JOURNAL_RES_GET_CHECK) return 1;