From: Kent Overstreet Date: Mon, 10 Jun 2019 00:32:54 +0000 (-0400) Subject: bcachefs: Don't allow bkey vals that are too big in extents btree X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=66b095b008ea6526c660fbecfacbd970416f971e;p=linux.git bcachefs: Don't allow bkey vals that are too big in extents btree Make sure we don't overflow BKEY_PADDED keys Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/bkey_methods.c b/fs/bcachefs/bkey_methods.c index 547f5b301ad4b..09ee958c55681 100644 --- a/fs/bcachefs/bkey_methods.c +++ b/fs/bcachefs/bkey_methods.c @@ -82,6 +82,11 @@ const char *__bch2_bkey_invalid(struct bch_fs *c, struct bkey_s_c k, if (k.k->u64s < BKEY_U64s) return "u64s too small"; + if ((btree_node_type_is_extents(type) || + type == BKEY_TYPE_BTREE) && + bkey_val_u64s(k.k) > BKEY_EXTENT_VAL_U64s_MAX) + return "value too big"; + if (btree_node_type_is_extents(type)) { if ((k.k->size == 0) != bkey_deleted(k.k)) return "bad size field"; diff --git a/fs/bcachefs/extents.c b/fs/bcachefs/extents.c index b55d52ec43a0b..4d3722cb7e33c 100644 --- a/fs/bcachefs/extents.c +++ b/fs/bcachefs/extents.c @@ -1291,9 +1291,6 @@ void bch2_insert_fixup_extent(struct btree_trans *trans, const char *bch2_extent_invalid(const struct bch_fs *c, struct bkey_s_c k) { - if (bkey_val_u64s(k.k) > BKEY_EXTENT_VAL_U64s_MAX) - return "value too big"; - return bch2_bkey_ptrs_invalid(c, k); }