summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@gnumonks.org>2014-02-22 22:50:00 +0100
committerPablo Neira Ayuso <pablo@gnumonks.org>2014-02-22 22:50:00 +0100
commitefdbb3bc73924d215ebee820d5dc685a0df13ad0 (patch)
treecf198961b04281c3a22c03227c1ac531cd961d6e
parente91a1a4ab7bbf7a3c0577cdf043003350168e0b9 (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.c12
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);