diff options
author | Pablo Neira Ayuso <pablo@gnumonks.org> | 2014-02-22 22:50:00 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@gnumonks.org> | 2014-02-22 22:50:00 +0100 |
commit | efdbb3bc73924d215ebee820d5dc685a0df13ad0 (patch) | |
tree | cf198961b04281c3a22c03227c1ac531cd961d6e | |
parent | e91a1a4ab7bbf7a3c0577cdf043003350168e0b9 (diff) |
gtp-rtnl: fix leak in struct mnl_socket on error in gtp_dev_create()
Release it in the error path.
-rw-r--r-- | libgtnl/src/gtp-rtnl.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/libgtnl/src/gtp-rtnl.c b/libgtnl/src/gtp-rtnl.c index 2cd43ef..a48fa1c 100644 --- a/libgtnl/src/gtp-rtnl.c +++ b/libgtnl/src/gtp-rtnl.c @@ -51,7 +51,7 @@ int gtp_dev_create(const char *ifname) if (mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID) < 0) { perror("mnl_socket_bind"); - return -1; + goto err; } portid = mnl_socket_get_portid(nl); @@ -60,23 +60,25 @@ int gtp_dev_create(const char *ifname) if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) { perror("mnl_socket_send"); - return -1; + goto err; } ret = mnl_socket_recvfrom(nl, buf, sizeof(buf)); if (ret == -1) { perror("read"); - return -1; + goto err; } ret = mnl_cb_run(buf, ret, seq, portid, NULL, NULL); if (ret == -1){ perror("callback"); - return -1; + goto err; } mnl_socket_close(nl); - return 0; +err: + mnl_socket_close(nl); + return -1; } EXPORT_SYMBOL(gtp_dev_create); |