diff options
author | Yang Yingliang <yangyingliang@huawei.com> | 2021-10-12 10:37:35 +0800 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2021-10-12 11:48:43 +0100 |
commit | 55e6d8037805b3400096d621091dfbf713f97e83 (patch) | |
tree | 75c0e1a9f46cbdc4a92bb43ef7a5adaa76f19feb /net/mptcp/token_test.c | |
parent | d287801c497151a44e5577fb3bbab673fe52e7b0 (diff) | |
download | linux-55e6d8037805b3400096d621091dfbf713f97e83.tar.gz linux-55e6d8037805b3400096d621091dfbf713f97e83.tar.bz2 linux-55e6d8037805b3400096d621091dfbf713f97e83.zip |
regmap: Fix possible double-free in regcache_rbtree_exit()
In regcache_rbtree_insert_to_block(), when 'present' realloc failed,
the 'blk' which is supposed to assign to 'rbnode->block' will be freed,
so 'rbnode->block' points a freed memory, in the error handling path of
regcache_rbtree_init(), 'rbnode->block' will be freed again in
regcache_rbtree_exit(), KASAN will report double-free as follows:
BUG: KASAN: double-free or invalid-free in kfree+0xce/0x390
Call Trace:
slab_free_freelist_hook+0x10d/0x240
kfree+0xce/0x390
regcache_rbtree_exit+0x15d/0x1a0
regcache_rbtree_init+0x224/0x2c0
regcache_init+0x88d/0x1310
__regmap_init+0x3151/0x4a80
__devm_regmap_init+0x7d/0x100
madera_spi_probe+0x10f/0x333 [madera_spi]
spi_probe+0x183/0x210
really_probe+0x285/0xc30
To fix this, moving up the assignment of rbnode->block to immediately after
the reallocation has succeeded so that the data structure stays valid even
if the second reallocation fails.
Reported-by: Hulk Robot <hulkci@huawei.com>
Fixes: 3f4ff561bc88b ("regmap: rbtree: Make cache_present bitmap per node")
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Link: https://lore.kernel.org/r/20211012023735.1632786-1-yangyingliang@huawei.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'net/mptcp/token_test.c')
0 files changed, 0 insertions, 0 deletions