Skip to content

Commit f0a73d4

Browse files
author
Kent Overstreet
committed
bcachefs: Check for backpointer bucket_offset >= bucket size
Signed-off-by: Kent Overstreet <[email protected]>
1 parent 27c15ed commit f0a73d4

File tree

3 files changed

+9
-10
lines changed

3 files changed

+9
-10
lines changed

fs/bcachefs/backpointers.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,15 @@ int bch2_backpointer_invalid(struct bch_fs *c, struct bkey_s_c k,
4949
if (!bch2_dev_exists2(c, bp.k->p.inode))
5050
return 0;
5151

52+
struct bch_dev *ca = bch_dev_bkey_exists(c, bp.k->p.inode);
5253
struct bpos bucket = bp_pos_to_bucket(c, bp.k->p);
5354
int ret = 0;
5455

55-
bkey_fsck_err_on(!bpos_eq(bp.k->p, bucket_pos_to_bp(c, bucket, bp.v->bucket_offset)),
56+
bkey_fsck_err_on((bp.v->bucket_offset >> MAX_EXTENT_COMPRESS_RATIO_SHIFT) >= ca->mi.bucket_size ||
57+
!bpos_eq(bp.k->p, bucket_pos_to_bp(c, bucket, bp.v->bucket_offset)),
5658
c, err,
57-
backpointer_pos_wrong,
58-
"backpointer at wrong pos");
59+
backpointer_bucket_offset_wrong,
60+
"backpointer bucket_offset wrong");
5961
fsck_err:
6062
return ret;
6163
}

fs/bcachefs/backpointers.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,11 @@ static inline struct bpos bucket_pos_to_bp(const struct bch_fs *c,
5353
u64 bucket_offset)
5454
{
5555
struct bch_dev *ca = bch_dev_bkey_exists(c, bucket.inode);
56-
struct bpos ret;
57-
58-
ret = POS(bucket.inode,
59-
(bucket_to_sector(ca, bucket.offset) <<
60-
MAX_EXTENT_COMPRESS_RATIO_SHIFT) + bucket_offset);
56+
struct bpos ret = POS(bucket.inode,
57+
(bucket_to_sector(ca, bucket.offset) <<
58+
MAX_EXTENT_COMPRESS_RATIO_SHIFT) + bucket_offset);
6159

6260
EBUG_ON(!bkey_eq(bucket, bp_pos_to_bucket(c, ret)));
63-
6461
return ret;
6562
}
6663

fs/bcachefs/sb-errors_types.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@
130130
x(bucket_gens_nonzero_for_invalid_buckets, 122) \
131131
x(need_discard_freespace_key_to_invalid_dev_bucket, 123) \
132132
x(need_discard_freespace_key_bad, 124) \
133-
x(backpointer_pos_wrong, 125) \
133+
x(backpointer_bucket_offset_wrong, 125) \
134134
x(backpointer_to_missing_device, 126) \
135135
x(backpointer_to_missing_alloc, 127) \
136136
x(backpointer_to_missing_ptr, 128) \

0 commit comments

Comments
 (0)