| From c090959b9dd8c87703e275079aa4b4a824ba3f8e Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Wed, 16 Nov 2016 17:31:30 +0000 |
| Subject: bus: vexpress-config: fix device reference leak |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| commit c090959b9dd8c87703e275079aa4b4a824ba3f8e upstream. |
| |
| Make sure to drop the reference to the parent device taken by |
| class_find_device() after populating the bus. |
| |
| Fixes: 3b9334ac835b ("mfd: vexpress: Convert custom func API to regmap") |
| Acked-by: Sudeep Holla <sudeep.holla@arm.com> |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/bus/vexpress-config.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/bus/vexpress-config.c |
| +++ b/drivers/bus/vexpress-config.c |
| @@ -171,6 +171,7 @@ static int vexpress_config_populate(stru |
| { |
| struct device_node *bridge; |
| struct device *parent; |
| + int ret; |
| |
| bridge = of_parse_phandle(node, "arm,vexpress,config-bridge", 0); |
| if (!bridge) |
| @@ -181,7 +182,11 @@ static int vexpress_config_populate(stru |
| if (WARN_ON(!parent)) |
| return -ENODEV; |
| |
| - return of_platform_populate(node, NULL, NULL, parent); |
| + ret = of_platform_populate(node, NULL, NULL, parent); |
| + |
| + put_device(parent); |
| + |
| + return ret; |
| } |
| |
| static int __init vexpress_config_init(void) |