mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
bcachefs: Fix assert in bch2_alloc_v4_invalid()
Reported-by: syzbot+10827fa6b176e1acf1d0@syzkaller.appspotmail.com Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
9a0ec04511
commit
6b8cbfc3db
@ -244,10 +244,10 @@ int bch2_alloc_v4_invalid(struct bch_fs *c, struct bkey_s_c k,
|
||||
struct bkey_s_c_alloc_v4 a = bkey_s_c_to_alloc_v4(k);
|
||||
int ret = 0;
|
||||
|
||||
bkey_fsck_err_on(alloc_v4_u64s(a.v) > bkey_val_u64s(k.k), c, err,
|
||||
bkey_fsck_err_on(alloc_v4_u64s_noerror(a.v) > bkey_val_u64s(k.k), c, err,
|
||||
alloc_v4_val_size_bad,
|
||||
"bad val size (%u > %zu)",
|
||||
alloc_v4_u64s(a.v), bkey_val_u64s(k.k));
|
||||
alloc_v4_u64s_noerror(a.v), bkey_val_u64s(k.k));
|
||||
|
||||
bkey_fsck_err_on(!BCH_ALLOC_V4_BACKPOINTERS_START(a.v) &&
|
||||
BCH_ALLOC_V4_NR_BACKPOINTERS(a.v), c, err,
|
||||
|
@ -126,13 +126,17 @@ static inline struct bpos alloc_freespace_pos(struct bpos pos, struct bch_alloc_
|
||||
return pos;
|
||||
}
|
||||
|
||||
static inline unsigned alloc_v4_u64s(const struct bch_alloc_v4 *a)
|
||||
static inline unsigned alloc_v4_u64s_noerror(const struct bch_alloc_v4 *a)
|
||||
{
|
||||
unsigned ret = (BCH_ALLOC_V4_BACKPOINTERS_START(a) ?:
|
||||
return (BCH_ALLOC_V4_BACKPOINTERS_START(a) ?:
|
||||
BCH_ALLOC_V4_U64s_V0) +
|
||||
BCH_ALLOC_V4_NR_BACKPOINTERS(a) *
|
||||
(sizeof(struct bch_backpointer) / sizeof(u64));
|
||||
}
|
||||
|
||||
static inline unsigned alloc_v4_u64s(const struct bch_alloc_v4 *a)
|
||||
{
|
||||
unsigned ret = alloc_v4_u64s_noerror(a);
|
||||
BUG_ON(ret > U8_MAX - BKEY_U64s);
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user