X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=system-linux.c;h=611acb882d4db0fe2f4444f65217ba685d6d4721;hp=27c0f1e3416baaece91579dd32cf66daf87ce805;hb=fa64fe118945127007fc6f6f558d0630258790bd;hpb=bb99e8017b5b99e5ccd2c05c11b516b6e629ab20 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;