aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Dai <daidavid1@codeaurora.org>2018-03-22 17:00:57 -0700
committerShirle Yuen <shirleyshukyee@google.com>2018-08-05 16:34:45 -0700
commit3a9de05edd5fff5e20198071f44c93ab6672dd1d (patch)
treed0435fcc6289c27d268ed0d14c339746ba5cfaa8
parent9083f9f7c2bb394c5cbdd5d056e1fc2bee688d6b (diff)
downloadqcom-msm8x09-v3.10-3a9de05edd5fff5e20198071f44c93ab6672dd1d.tar.gz
msm: msm_bus: Fix error handling in msm_bus_device_init.
Correctly free pointers allocated by kzalloc. Remove devm_kfree in error handling as device associated memory is automatically freed upon destruction of device. Always use put_device instead of kfree on the initialized device. Bug: 111289931 Change-Id: Icbd88e9ccd42fedb4fbce5eff69248c3fceffc02 Signed-off-by: David Dai <daidavid1@codeaurora.org> Signed-off-by: Srinivasarao P <spathi@codeaurora.org> Signed-off-by: Chetan C R <cravin@codeaurora.org> (cherry picked from commit 0c5253106f7912f9de7b002e53aeebe8eba44e89)
-rw-r--r--drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c50
1 files changed, 19 insertions, 31 deletions
diff --git a/drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c b/drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c
index 759452a2a70..28c4a61d1d6 100644
--- a/drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c
+++ b/drivers/platform/msm/msm_bus/msm_bus_fabric_adhoc.c
@@ -948,7 +948,7 @@ static struct device *msm_bus_device_init(
if (!bus_dev) {
MSM_BUS_ERR("%s:Device alloc failed\n", __func__);
bus_dev = NULL;
- goto exit_device_init;
+ goto err_device_init;
}
/**
* Init here so we can use devm calls
@@ -958,54 +958,42 @@ static struct device *msm_bus_device_init(
bus_node = devm_kzalloc(bus_dev,
sizeof(struct msm_bus_node_device_type), GFP_KERNEL);
if (!bus_node) {
- MSM_BUS_ERR("%s:Bus node alloc failed\n", __func__);
- kfree(bus_dev);
- bus_dev = NULL;
- goto exit_device_init;
+ ret = -ENOMEM;
+ goto err_device_init;
}
node_info = devm_kzalloc(bus_dev,
sizeof(struct msm_bus_node_info_type), GFP_KERNEL);
if (!node_info) {
- MSM_BUS_ERR("%s:Bus node info alloc failed\n", __func__);
- devm_kfree(bus_dev, bus_node);
- kfree(bus_dev);
- bus_dev = NULL;
- goto exit_device_init;
+ ret = -ENOMEM;
+ goto err_put_device;
}
bus_node->node_info = node_info;
bus_node->ap_owned = pdata->ap_owned;
bus_dev->platform_data = bus_node;
- if (msm_bus_copy_node_info(pdata, bus_dev) < 0) {
- devm_kfree(bus_dev, bus_node);
- devm_kfree(bus_dev, node_info);
- kfree(bus_dev);
- bus_dev = NULL;
- goto exit_device_init;
- }
+ ret = msm_bus_copy_node_info(pdata, bus_dev);
+ if (ret)
+ goto err_put_device;
bus_dev->bus = &msm_bus_type;
dev_set_name(bus_dev, bus_node->node_info->name);
ret = device_add(bus_dev);
- if (ret < 0) {
+ if (ret) {
MSM_BUS_ERR("%s: Error registering device %d",
__func__, pdata->node_info->id);
- devm_kfree(bus_dev, bus_node);
- devm_kfree(bus_dev, node_info->dev_connections);
- devm_kfree(bus_dev, node_info->connections);
- devm_kfree(bus_dev, node_info->black_connections);
- devm_kfree(bus_dev, node_info->black_listed_connections);
- devm_kfree(bus_dev, node_info);
- kfree(bus_dev);
- bus_dev = NULL;
- goto exit_device_init;
+ goto err_put_device;
}
-
-exit_device_init:
return bus_dev;
+
+err_put_device:
+ put_device(bus_dev);
+ bus_dev = NULL;
+ kfree(bus_node);
+err_device_init:
+ return ERR_PTR(ret);
}
static int msm_bus_setup_dev_conn(struct device *bus_dev, void *data)
@@ -1127,10 +1115,10 @@ static int msm_bus_device_probe(struct platform_device *pdev)
node_dev = msm_bus_device_init(&pdata->info[i]);
- if (!node_dev) {
+ if (IS_ERR(node_dev)) {
MSM_BUS_ERR("%s: Error during dev init for %d",
__func__, pdata->info[i].node_info->id);
- ret = -ENXIO;
+ ret = PTR_ERR(node_dev);
goto exit_device_probe;
}