diff options
author | Mark Brown <broonie@kernel.org> | 2023-04-03 23:02:39 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2023-04-04 14:46:46 +0300 |
commit | 451941ac1ee2be125ac5029593a64b04badaa314 (patch) | |
tree | 5224e09c5b29423a67e642bacbf8059dae55c5a6 /drivers/base/regmap | |
parent | f033c26de5a5734625d2dd1dc196745fae186f1b (diff) | |
download | linux-451941ac1ee2be125ac5029593a64b04badaa314.tar.xz |
regmap: Fix double unlock in the maple cache
Doing the dance to drop the maple tree's internal spinlock means we need
multiple exit paths in our error handling.
Reported-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20230403-regmap-maple-unlock-v1-1-89998991b16c@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/base/regmap')
-rw-r--r-- | drivers/base/regmap/regcache-maple.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/base/regmap/regcache-maple.c b/drivers/base/regmap/regcache-maple.c index 497cc708d277..20fb7228fc6b 100644 --- a/drivers/base/regmap/regcache-maple.c +++ b/drivers/base/regmap/regcache-maple.c @@ -137,7 +137,7 @@ static int regcache_maple_drop(struct regmap *map, unsigned int min, GFP_KERNEL); if (!lower) { ret = -ENOMEM; - goto out; + goto out_unlocked; } } @@ -151,7 +151,7 @@ static int regcache_maple_drop(struct regmap *map, unsigned int min, GFP_KERNEL); if (!upper) { ret = -ENOMEM; - goto out; + goto out_unlocked; } } @@ -179,6 +179,7 @@ static int regcache_maple_drop(struct regmap *map, unsigned int min, out: mas_unlock(&mas); +out_unlocked: kfree(lower); kfree(upper); |