netfilter: ipt_CLUSTERIP: put config struct if we can't increment ct refcount
authorFlorian Westphal <fw@strlen.de>
Fri, 16 Feb 2018 11:49:32 +0000 (12:49 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Sun, 25 Feb 2018 19:02:49 +0000 (20:02 +0100)
This needs to put() the entry to avoid a resource leak in error path.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/ipv4/netfilter/ipt_CLUSTERIP.c

index 4b02ab39ebc54b73f6ec532fa6329fa9df47bb77..4c8cfd352687ba56af5063d2ad9d76c0724ed33a 100644 (file)
@@ -496,12 +496,15 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par)
                                return PTR_ERR(config);
                }
        }
-       cipinfo->config = config;
 
        ret = nf_ct_netns_get(par->net, par->family);
-       if (ret < 0)
+       if (ret < 0) {
                pr_info("cannot load conntrack support for proto=%u\n",
                        par->family);
+               clusterip_config_entry_put(par->net, config);
+               clusterip_config_put(config);
+               return ret;
+       }
 
        if (!par->net->xt.clusterip_deprecated_warning) {
                pr_info("ipt_CLUSTERIP is deprecated and it will removed soon, "
@@ -509,6 +512,7 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par)
                par->net->xt.clusterip_deprecated_warning = true;
        }
 
+       cipinfo->config = config;
        return ret;
 }