Skip to content

Commit 8685de2

Browse files
committed
Merge tag 'regmap-fix-v5.15-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap
Pull regmap fix from Mark Brown: "This fixes a potential double free when handling an out of memory error inserting a node into an rbtree regcache" * tag 'regmap-fix-v5.15-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap: regmap: Fix possible double-free in regcache_rbtree_exit()
2 parents eecd231 + 55e6d80 commit 8685de2

File tree

1 file changed

+3
-4
lines changed

1 file changed

+3
-4
lines changed

drivers/base/regmap/regcache-rbtree.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,14 +281,14 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,
281281
if (!blk)
282282
return -ENOMEM;
283283

284+
rbnode->block = blk;
285+
284286
if (BITS_TO_LONGS(blklen) > BITS_TO_LONGS(rbnode->blklen)) {
285287
present = krealloc(rbnode->cache_present,
286288
BITS_TO_LONGS(blklen) * sizeof(*present),
287289
GFP_KERNEL);
288-
if (!present) {
289-
kfree(blk);
290+
if (!present)
290291
return -ENOMEM;
291-
}
292292

293293
memset(present + BITS_TO_LONGS(rbnode->blklen), 0,
294294
(BITS_TO_LONGS(blklen) - BITS_TO_LONGS(rbnode->blklen))
@@ -305,7 +305,6 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,
305305
}
306306

307307
/* update the rbnode block, its size and the base register */
308-
rbnode->block = blk;
309308
rbnode->blklen = blklen;
310309
rbnode->base_reg = base_reg;
311310
rbnode->cache_present = present;

0 commit comments

Comments
 (0)