Commit fc96e661 authored by Dan Carpenter's avatar Dan Carpenter Committed by Arnd Bergmann

misc: vexpress: fix error handling vexpress_syscfg_regmap_init()

This function should be returning an ERR_PTR() on failure instead of
NULL.  Also there is a use after free bug if regmap_init() fails because
we free "func" and then dereference doing the return.
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Acked-by: default avatarPawel Moll <pawel.moll@arm.com>
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent 19682f72
...@@ -199,7 +199,7 @@ static struct regmap *vexpress_syscfg_regmap_init(struct device *dev, ...@@ -199,7 +199,7 @@ static struct regmap *vexpress_syscfg_regmap_init(struct device *dev,
func = kzalloc(sizeof(*func) + sizeof(*func->template) * num, func = kzalloc(sizeof(*func) + sizeof(*func->template) * num,
GFP_KERNEL); GFP_KERNEL);
if (!func) if (!func)
return NULL; return ERR_PTR(-ENOMEM);
func->syscfg = syscfg; func->syscfg = syscfg;
func->num_templates = num; func->num_templates = num;
...@@ -231,10 +231,14 @@ static struct regmap *vexpress_syscfg_regmap_init(struct device *dev, ...@@ -231,10 +231,14 @@ static struct regmap *vexpress_syscfg_regmap_init(struct device *dev,
func->regmap = regmap_init(dev, NULL, func, func->regmap = regmap_init(dev, NULL, func,
&vexpress_syscfg_regmap_config); &vexpress_syscfg_regmap_config);
if (IS_ERR(func->regmap)) if (IS_ERR(func->regmap)) {
void *err = func->regmap;
kfree(func); kfree(func);
else return err;
list_add(&func->list, &syscfg->funcs); }
list_add(&func->list, &syscfg->funcs);
return func->regmap; return func->regmap;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment