of: overlay: fix memory leak related to duplicated property

Function of_changeset_add_property or of_changeset_update_property may
fails. In this case the property just allocated is never deallocated.

Signed-off-by: Lixin Wang <alan.1.wang@nokia-sbell.com>
Signed-off-by: Rob Herring <robh@kernel.org>
This commit is contained in:
Lixin Wang 2017-10-16 17:54:32 +08:00 committed by Rob Herring
parent e0f4145685
commit ac0f3e30d8
1 changed files with 10 additions and 3 deletions

View File

@ -162,6 +162,7 @@ static int of_overlay_apply_single_property(struct of_overlay *ov,
bool is_symbols_node) bool is_symbols_node)
{ {
struct property *propn = NULL, *tprop; struct property *propn = NULL, *tprop;
int ret = 0;
/* NOTE: Multiple changes of single properties not supported */ /* NOTE: Multiple changes of single properties not supported */
tprop = of_find_property(target, prop->name, NULL); tprop = of_find_property(target, prop->name, NULL);
@ -186,10 +187,16 @@ static int of_overlay_apply_single_property(struct of_overlay *ov,
/* not found? add */ /* not found? add */
if (tprop == NULL) if (tprop == NULL)
return of_changeset_add_property(&ov->cset, target, propn); ret = of_changeset_add_property(&ov->cset, target, propn);
else /* found? update */
ret = of_changeset_update_property(&ov->cset, target, propn);
/* found? update */ if (ret) {
return of_changeset_update_property(&ov->cset, target, propn); kfree(propn->name);
kfree(propn->value);
kfree(propn);
}
return ret;
} }
static int of_overlay_apply_single_device_node(struct of_overlay *ov, static int of_overlay_apply_single_device_node(struct of_overlay *ov,