diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2016-08-11 18:22:40 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2016-08-11 18:23:11 -0800 |
commit | 8478a659ceb2219a6a55251a0db87f54fd82bebf (patch) | |
tree | f61554b865b096ab6e722d639d6c3189e22b6da6 | |
parent | 1f5af7b5eec76ac23dc8121fa89b59b3f529184f (diff) |
bcache: verify k->format when reading in btree nodes
-rw-r--r-- | drivers/md/bcache/btree_io.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/md/bcache/btree_io.c b/drivers/md/bcache/btree_io.c index 34631d043645..57c820456b4f 100644 --- a/drivers/md/bcache/btree_io.c +++ b/drivers/md/bcache/btree_io.c @@ -228,6 +228,16 @@ static const char *validate_bset(struct cache_set *c, struct btree *b, break; } + if (k->format > KEY_FORMAT_CURRENT) { + btree_node_error(b, c, ptr, + "invalid bkey format %u", k->format); + + i->u64s = cpu_to_le16(le16_to_cpu(i->u64s) - k->u64s); + memmove(k, bkey_next(k), + (void *) bset_bkey_last(i) - (void *) k); + continue; + } + if (BSET_BIG_ENDIAN(i) != CPU_BIG_ENDIAN) bch_bkey_swab(btree_node_type(b), &b->keys.format, k); |