aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorJohan Hovold <johan@kernel.org>2016-11-01 11:26:01 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-01-19 14:18:08 -0500
commit25bba7152f2afc3e9517a53f3aa934fbaa68cd68 (patch)
treea163259c40f8439ab1958be83f73a835724b3bb5 /arch/powerpc
parentae4c24b2d58492d0da72b93aca9cd2f3ed48c69e (diff)
powerpc/ibmebus: Fix further device reference leaks
commit 815a7141c4d1b11610dccb7fcbb38633759824f2 upstream. Make sure to drop any reference taken by bus_find_device() when creating devices during init and driver registration. Fixes: 55347cc9962f ("[POWERPC] ibmebus: Add device creation and bus probing based on of_device") Signed-off-by: Johan Hovold <johan@kernel.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/kernel/ibmebus.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/ibmebus.c b/arch/powerpc/kernel/ibmebus.c
index 6ca9a2ffaac7..0379ddf29220 100644
--- a/arch/powerpc/kernel/ibmebus.c
+++ b/arch/powerpc/kernel/ibmebus.c
@@ -180,6 +180,7 @@ static int ibmebus_create_device(struct device_node *dn)
180static int ibmebus_create_devices(const struct of_device_id *matches) 180static int ibmebus_create_devices(const struct of_device_id *matches)
181{ 181{
182 struct device_node *root, *child; 182 struct device_node *root, *child;
183 struct device *dev;
183 int ret = 0; 184 int ret = 0;
184 185
185 root = of_find_node_by_path("/"); 186 root = of_find_node_by_path("/");
@@ -188,9 +189,12 @@ static int ibmebus_create_devices(const struct of_device_id *matches)
188 if (!of_match_node(matches, child)) 189 if (!of_match_node(matches, child))
189 continue; 190 continue;
190 191
191 if (bus_find_device(&ibmebus_bus_type, NULL, child, 192 dev = bus_find_device(&ibmebus_bus_type, NULL, child,
192 ibmebus_match_node)) 193 ibmebus_match_node);
194 if (dev) {
195 put_device(dev);
193 continue; 196 continue;
197 }
194 198
195 ret = ibmebus_create_device(child); 199 ret = ibmebus_create_device(child);
196 if (ret) { 200 if (ret) {