| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: Suman Anna <s-anna@ti.com> |
| Date: Tue, 9 May 2017 18:58:24 -0500 |
| Subject: uio: fix incorrect memory leak cleanup |
| |
| From: Suman Anna <s-anna@ti.com> |
| |
| |
| [ Upstream commit 0d83539092ddb1ab79b4d65bccb866bf07ea2ccd ] |
| |
| Commit 75f0aef6220d ("uio: fix memory leak") has fixed up some |
| memory leaks during the failure paths of the addition of uio |
| attributes, but still is not correct entirely. A kobject_uevent() |
| failure still needs a kobject_put() and the kobject container |
| structure allocation failure before the kobject_init() doesn't |
| need a kobject_put(). Fix this properly. |
| |
| Fixes: 75f0aef6220d ("uio: fix memory leak") |
| Signed-off-by: Suman Anna <s-anna@ti.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/uio/uio.c | 8 ++++---- |
| 1 file changed, 4 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/uio/uio.c |
| +++ b/drivers/uio/uio.c |
| @@ -279,7 +279,7 @@ static int uio_dev_add_attributes(struct |
| map = kzalloc(sizeof(*map), GFP_KERNEL); |
| if (!map) { |
| ret = -ENOMEM; |
| - goto err_map_kobj; |
| + goto err_map; |
| } |
| kobject_init(&map->kobj, &map_attr_type); |
| map->mem = mem; |
| @@ -289,7 +289,7 @@ static int uio_dev_add_attributes(struct |
| goto err_map_kobj; |
| ret = kobject_uevent(&map->kobj, KOBJ_ADD); |
| if (ret) |
| - goto err_map; |
| + goto err_map_kobj; |
| } |
| |
| for (pi = 0; pi < MAX_UIO_PORT_REGIONS; pi++) { |
| @@ -308,7 +308,7 @@ static int uio_dev_add_attributes(struct |
| portio = kzalloc(sizeof(*portio), GFP_KERNEL); |
| if (!portio) { |
| ret = -ENOMEM; |
| - goto err_portio_kobj; |
| + goto err_portio; |
| } |
| kobject_init(&portio->kobj, &portio_attr_type); |
| portio->port = port; |
| @@ -319,7 +319,7 @@ static int uio_dev_add_attributes(struct |
| goto err_portio_kobj; |
| ret = kobject_uevent(&portio->kobj, KOBJ_ADD); |
| if (ret) |
| - goto err_portio; |
| + goto err_portio_kobj; |
| } |
| |
| return 0; |