From: Felix Fietkau Date: Thu, 29 Oct 2015 15:06:12 +0000 (+0100) Subject: system-linux: fix memory leak on error in system_if_check X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=fa64fe118945127007fc6f6f558d0630258790bd;p=project%2Fnetifd.git system-linux: fix memory leak on error in system_if_check Detected by Coverity CID 1330302 Signed-off-by: Felix Fietkau --- diff --git a/system-linux.c b/system-linux.c index 27c0f1e..611acb8 100644 --- a/system-linux.c +++ b/system-linux.c @@ -1295,10 +1295,13 @@ int system_if_check(struct device *dev) int ret = 1; msg = nlmsg_alloc_simple(RTM_GETLINK, 0); - if (!msg || nlmsg_append(msg, &ifi, sizeof(ifi), 0) || - nla_put_string(msg, IFLA_IFNAME, dev->ifname)) + if (!msg) goto out; + if (nlmsg_append(msg, &ifi, sizeof(ifi), 0) || + nla_put_string(msg, IFLA_IFNAME, dev->ifname)) + goto free; + nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, cb_if_check_valid, &chk); nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, cb_if_check_ack, &chk); nl_cb_err(cb, NL_CB_CUSTOM, cb_if_check_error, &chk); @@ -1307,9 +1310,10 @@ int system_if_check(struct device *dev) while (chk.pending > 0) nl_recvmsgs(sock_rtnl, cb); - nlmsg_free(msg); ret = chk.pending; +free: + nlmsg_free(msg); out: nl_cb_put(cb); return ret;