Re: [PATCH 1/3] of: fix of_node leak caused in of_find_node_opts_by_path

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]