bcachefs: Don't allow bkey vals that are too big in extents btree
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 10 Jun 2019 00:32:54 +0000 (20:32 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:23 +0000 (17:08 -0400)
Make sure we don't overflow BKEY_PADDED keys

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/bkey_methods.c
fs/bcachefs/extents.c

index 547f5b301ad4b5a152d7c75c20a1c44607e9b5f6..09ee958c55681fe87d4ce8664278ce916f6fd6d0 100644 (file)
@@ -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";
index b55d52ec43a0bad3f5b34901b7c83dd9207b6020..4d3722cb7e33c7de96a8152fc208c337c443822d 100644 (file)
@@ -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);
 }