Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b86e1926 authored by Dan Carpenter's avatar Dan Carpenter Committed by Greg Kroah-Hartman
Browse files

mfd: 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 avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8a26af30
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -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;
@@ -231,9 +231,13 @@ 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
		return err;
	}

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

	return func->regmap;