]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
genl.c: fix a resource leak found by coverity
authorSerge Hallyn <serge.hallyn@ubuntu.com>
Mon, 15 Apr 2013 02:48:49 +0000 (21:48 -0500)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Mon, 15 Apr 2013 02:48:49 +0000 (21:48 -0500)
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
src/lxc/genl.c

index c9a3d72dcc8ac2a13a6cc5630c8cd31b5a485c39..873b0847ec0988dd05840d48f144b8c340750e88 100644 (file)
@@ -60,45 +60,46 @@ static int genetlink_resolve_family(const char *family)
 
        ret = netlink_open(&handler, NETLINK_GENERIC);
        if (ret)
-               return ret;
+               goto out;
 
        ret = nla_put_string((struct nlmsg *)&request->nlmsghdr,
                             CTRL_ATTR_FAMILY_NAME, family);
        if (ret)
-               goto out;
+               goto out_close;
 
        ret = netlink_transaction(&handler, (struct nlmsg *)&request->nlmsghdr,
                                  (struct nlmsg *)&reply->nlmsghdr);
        if (ret < 0)
-               goto out;
+               goto out_close;
 
        genlmsghdr = NLMSG_DATA(&reply->nlmsghdr);
        len = reply->nlmsghdr.nlmsg_len;
 
        ret = -ENOMSG;
        if (reply->nlmsghdr.nlmsg_type !=  GENL_ID_CTRL)
-               goto out;
+               goto out_close;
 
        if (genlmsghdr->cmd != CTRL_CMD_NEWFAMILY)
-               goto out;
+               goto out_close;
 
        ret = -EMSGSIZE;
        len -= NLMSG_LENGTH(GENL_HDRLEN);
        if (len < 0)
-               goto out;
+               goto out_close;
        
        attr = (struct nlattr *)GENLMSG_DATA(reply);
        attr = (struct nlattr *)((char *)attr + NLA_ALIGN(attr->nla_len));
        
        ret = -ENOMSG;
        if (attr->nla_type != CTRL_ATTR_FAMILY_ID)
-               goto out;
+               goto out_close;
 
        ret =  *(__u16 *) NLA_DATA(attr);
+out_close:
+       netlink_close(&handler);
 out:
        genlmsg_free(request);
        genlmsg_free(reply);
-       netlink_close(&handler);
        return ret;
 }