| From foo@baz Thu Mar 28 21:57:57 CET 2019 |
| From: YueHaibing <yuehaibing@huawei.com> |
| Date: Thu, 21 Mar 2019 15:02:50 +0800 |
| Subject: genetlink: Fix a memory leak on error path |
| |
| From: YueHaibing <yuehaibing@huawei.com> |
| |
| [ Upstream commit ceabee6c59943bdd5e1da1a6a20dc7ee5f8113a2 ] |
| |
| In genl_register_family(), when idr_alloc() fails, |
| we forget to free the memory we possibly allocate for |
| family->attrbuf. |
| |
| Reported-by: Hulk Robot <hulkci@huawei.com> |
| Fixes: 2ae0f17df1cd ("genetlink: use idr to track families") |
| Signed-off-by: YueHaibing <yuehaibing@huawei.com> |
| Reviewed-by: Kirill Tkhai <ktkhai@virtuozzo.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/netlink/genetlink.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/net/netlink/genetlink.c |
| +++ b/net/netlink/genetlink.c |
| @@ -365,7 +365,7 @@ int genl_register_family(struct genl_fam |
| start, end + 1, GFP_KERNEL); |
| if (family->id < 0) { |
| err = family->id; |
| - goto errout_locked; |
| + goto errout_free; |
| } |
| |
| err = genl_validate_assign_mc_groups(family); |
| @@ -384,6 +384,7 @@ int genl_register_family(struct genl_fam |
| |
| errout_remove: |
| idr_remove(&genl_fam_idr, family->id); |
| +errout_free: |
| kfree(family->attrbuf); |
| errout_locked: |
| genl_unlock_all(); |