summaryrefslogtreecommitdiffstats
path: root/drivers/of
diff options
context:
space:
mode:
authorFrank Rowand <frank.rowand@sony.com>2018-10-04 20:26:05 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-02-06 17:30:15 +0100
commit9af27fab006134b02e7f501214f53a3b7ee03d0d (patch)
tree975920bdb7b3dff8e48665b1e811f45ff3ca144d /drivers/of
parent5006496fb2c8ded3a1211dcf9ee53070205ebe7f (diff)
downloadlinux-stable-9af27fab006134b02e7f501214f53a3b7ee03d0d.tar.gz
linux-stable-9af27fab006134b02e7f501214f53a3b7ee03d0d.tar.bz2
linux-stable-9af27fab006134b02e7f501214f53a3b7ee03d0d.zip
of: overlay: add missing of_node_get() in __of_attach_node_sysfs
commit 5b2c2f5a0ea3a43e0dee78059e34c7cb54136dcc upstream. There is a matching of_node_put() in __of_detach_node_sysfs() Remove misleading comment from function header comment for of_detach_node(). This patch may result in memory leaks from code that directly calls the dynamic node add and delete functions directly instead of using changesets. This commit should result in powerpc systems that dynamically allocate a node, then later deallocate the node to have a memory leak when the node is deallocated. The next commit will fix the leak. Tested-by: Alan Tull <atull@kernel.org> Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc) Signed-off-by: Frank Rowand <frank.rowand@sony.com> Cc: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/of')
-rw-r--r--drivers/of/dynamic.c3
-rw-r--r--drivers/of/kobj.c4
2 files changed, 3 insertions, 4 deletions
diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c
index 0ea0b8f2e25b..45c0b1f4cb69 100644
--- a/drivers/of/dynamic.c
+++ b/drivers/of/dynamic.c
@@ -275,9 +275,6 @@ void __of_detach_node(struct device_node *np)
/**
* of_detach_node() - "Unplug" a node from the device tree.
- *
- * The caller must hold a reference to the node. The memory associated with
- * the node is not freed until its refcount goes to zero.
*/
int of_detach_node(struct device_node *np)
{
diff --git a/drivers/of/kobj.c b/drivers/of/kobj.c
index 7a0a18980b98..c72eef988041 100644
--- a/drivers/of/kobj.c
+++ b/drivers/of/kobj.c
@@ -133,6 +133,9 @@ int __of_attach_node_sysfs(struct device_node *np)
}
if (!name)
return -ENOMEM;
+
+ of_node_get(np);
+
rc = kobject_add(&np->kobj, parent, "%s", name);
kfree(name);
if (rc)
@@ -159,6 +162,5 @@ void __of_detach_node_sysfs(struct device_node *np)
kobject_del(&np->kobj);
}
- /* finally remove the kobj_init ref */
of_node_put(np);
}