On 2017-01-23 11:40, Qi Hou wrote: > During stepping down the tree, parent node is gotten first and its refcount is > increased with of_node_get() in __of_get_next_child(). Since it just being used > as step node, its refcount must be decreased with of_node_put() after traversing > its child nodes. > > Or, its refcount will never be descreased to ZERO, then it will never be freed, > as well as other related memory blocks. > > To fix this, decrease refcount of parent with of_node_put() after > __of_find_node_by_path(). > > Signed-off-by: Qi Hou <qi.hou@xxxxxxxxxxxxx> > Acked-by: Peter Rosin <peda@xxxxxxxxxx> > --- > drivers/of/base.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/of/base.c b/drivers/of/base.c > index d4bea3c..091ad29 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -842,8 +842,10 @@ struct device_node *of_find_node_opts_by_path(const char *path, const char **opt > if (!np) > np = of_node_get(of_root); > while (np && *path == '/') { > + struct device_node *npp = np; Hi, You failed to add a blank line here... > path++; /* Increment past '/' delimiter */ > - np = __of_find_node_by_path(np, path); > + np = __of_find_node_by_path(npp, path); ...and there's no need to change the above line if you want to make a minimal change. Cheers, peda > + of_node_put(npp); > path = strchrnul(path, '/'); > if (separator && separator < path) > break; > -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html