]> www.infradead.org Git - linux.git/commitdiff
bcachefs: Check btree ptr min_key in .invalid
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 26 Mar 2024 01:58:07 +0000 (21:58 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 1 Apr 2024 00:36:11 +0000 (20:36 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/extents.c
fs/bcachefs/sb-errors_types.h

index 61395b113df9bdad67c0da7d2a4cc4f99664bc4e..b2432d88cda64c7fea38cc3118e6591e5b4efbcf 100644 (file)
@@ -189,13 +189,18 @@ int bch2_btree_ptr_v2_invalid(struct bch_fs *c, struct bkey_s_c k,
                              enum bkey_invalid_flags flags,
                              struct printbuf *err)
 {
+       struct bkey_s_c_btree_ptr_v2 bp = bkey_s_c_to_btree_ptr_v2(k);
        int ret = 0;
 
-       bkey_fsck_err_on(bkey_val_u64s(k.k) > BKEY_BTREE_PTR_VAL_U64s_MAX, c, err,
-                        btree_ptr_v2_val_too_big,
+       bkey_fsck_err_on(bkey_val_u64s(k.k) > BKEY_BTREE_PTR_VAL_U64s_MAX,
+                        c, err, btree_ptr_v2_val_too_big,
                         "value too big (%zu > %zu)",
                         bkey_val_u64s(k.k), BKEY_BTREE_PTR_VAL_U64s_MAX);
 
+       bkey_fsck_err_on(bpos_ge(bp.v->min_key, bp.k->p),
+                        c, err, btree_ptr_v2_min_key_bad,
+                        "min_key > key");
+
        ret = bch2_bkey_ptrs_invalid(c, k, flags, err);
 fsck_err:
        return ret;
index 8edbd9ef994c4011adbf158d2ba5857be4d5ac42..73e9634df8ffb028dd0129420161b576805bb3a7 100644 (file)
        x(subvol_loop,                                          258)    \
        x(subvol_unreachable,                                   259)    \
        x(btree_node_bkey_bad_u64s,                             260)    \
-       x(btree_node_topology_empty_interior_node,              261)
+       x(btree_node_topology_empty_interior_node,              261)    \
+       x(btree_ptr_v2_min_key_bad,                             262)
 
 enum bch_sb_error_id {
 #define x(t, n) BCH_FSCK_ERR_##t = n,