dm btree: add a defensive bounds check to insert_at()
[ Upstream commit 85bca3c05b
]
Corrupt metadata could trigger an out of bounds write.
Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
eafd73401a
commit
74b16f895b
|
@ -87,10 +87,12 @@ static int insert_at(size_t value_size, struct btree_node *node, unsigned index,
|
|||
__dm_written_to_disk(value)
|
||||
{
|
||||
uint32_t nr_entries = le32_to_cpu(node->header.nr_entries);
|
||||
uint32_t max_entries = le32_to_cpu(node->header.max_entries);
|
||||
__le64 key_le = cpu_to_le64(key);
|
||||
|
||||
if (index > nr_entries ||
|
||||
index >= le32_to_cpu(node->header.max_entries)) {
|
||||
index >= max_entries ||
|
||||
nr_entries >= max_entries) {
|
||||
DMERR("too many entries in btree node for insert");
|
||||
__dm_unbless_for_disk(value);
|
||||
return -ENOMEM;
|
||||
|
|
Loading…
Reference in New Issue