From: Kent Overstreet <kent.overstreet@gmail.com>
Date: Mon, 24 Jun 2019 22:11:35 +0000 (-0400)
Subject: bcachefs: Fix array overrun with unknown btree roots
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=2ded276b7e20084842225b47100f3391e00f540f;p=linux.git

bcachefs: Fix array overrun with unknown btree roots

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
---

diff --git a/fs/bcachefs/recovery.c b/fs/bcachefs/recovery.c
index 2b7133e376e3d..e0df2c0a4fdf5 100644
--- a/fs/bcachefs/recovery.c
+++ b/fs/bcachefs/recovery.c
@@ -379,7 +379,15 @@ static int journal_replay_entry_early(struct bch_fs *c,
 
 	switch (entry->type) {
 	case BCH_JSET_ENTRY_btree_root: {
-		struct btree_root *r = &c->btree_roots[entry->btree_id];
+		struct btree_root *r;
+
+		if (entry->btree_id >= BTREE_ID_NR) {
+			bch_err(c, "filesystem has unknown btree type %u",
+				entry->btree_id);
+			return -EINVAL;
+		}
+
+		r = &c->btree_roots[entry->btree_id];
 
 		if (entry->u64s) {
 			r->level = entry->level;