Skip to content

Commit

Permalink
misc: vexpress: fix error handling vexpress_syscfg_regmap_init()
Browse files Browse the repository at this point in the history
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: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Pawel Moll <pawel.moll@arm.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
  • Loading branch information
Dan Carpenter authored and Arnd Bergmann committed Jun 17, 2014
1 parent 19682f7 commit fc96e66
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions drivers/misc/vexpress-syscfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ static struct regmap *vexpress_syscfg_regmap_init(struct device *dev,
func = kzalloc(sizeof(*func) + sizeof(*func->template) * num,
GFP_KERNEL);
if (!func)
return NULL;
return ERR_PTR(-ENOMEM);

func->syscfg = syscfg;
func->num_templates = num;
Expand Down Expand Up @@ -231,10 +231,14 @@ static struct regmap *vexpress_syscfg_regmap_init(struct device *dev,
func->regmap = regmap_init(dev, NULL, func,
&vexpress_syscfg_regmap_config);

if (IS_ERR(func->regmap))
if (IS_ERR(func->regmap)) {
void *err = func->regmap;

kfree(func);
else
list_add(&func->list, &syscfg->funcs);
return err;
}

list_add(&func->list, &syscfg->funcs);

return func->regmap;
}
Expand Down

0 comments on commit fc96e66

Please sign in to comment.