diff options
author | Allen Yu <alleny@nvidia.com> | 2014-05-29 00:34:35 +0800 |
---|---|---|
committer | Riham Haidar <rhaidar@nvidia.com> | 2014-05-30 12:12:23 -0700 |
commit | 9d1193d12a8720cc451d95761b95bff144065384 (patch) | |
tree | 6dd39fdb830a00bec3fead4d98dae6fbbe4ea2ba /drivers/media/platform/tegra | |
parent | 5d5ebc829ba54070c4a9f363fe790be5781c9930 (diff) |
media: tegra: cam_dev: fix memory leak in virtual_device_add
If chip already added, we have a leak of v_chip. This patch
free v_chip if camera_chip_add(v_chip) return error.
bug 200007998
Change-Id: I81af0e8bd9f96f4d3d07491476584f48a8b33c1f
Signed-off-by: Allen Yu <alleny@nvidia.com>
Reviewed-on: http://git-master/r/416223
GVS: Gerrit_Virtual_Submit
Reviewed-by: Kerwin Wan <kerwinw@nvidia.com>
Reviewed-by: Thomas Cherry <tcherry@nvidia.com>
Reviewed-on: http://git-master/r/416888
Reviewed-by: Frank Chen <frankc@nvidia.com>
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Tested-by: Bharat Nihalani <bnihalani@nvidia.com>
Diffstat (limited to 'drivers/media/platform/tegra')
-rw-r--r-- | drivers/media/platform/tegra/cam_dev/virtual.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/media/platform/tegra/cam_dev/virtual.c b/drivers/media/platform/tegra/cam_dev/virtual.c index df8a17cd3264..ae5a0e3a3c9a 100644 --- a/drivers/media/platform/tegra/cam_dev/virtual.c +++ b/drivers/media/platform/tegra/cam_dev/virtual.c @@ -511,8 +511,14 @@ int virtual_device_add(struct device *dev, unsigned long arg) v_chip->shutdown = virtual_shutdown, v_chip->update = virtual_update, - camera_chip_add(v_chip); - return 0; + err = camera_chip_add(v_chip); + if (err) { + kfree(v_chip); + if (err == -EEXIST) + err = 0; + } + + return err; } static int __init virtual_init(void) |