Commit 2f3ab9f9 authored by Joe Stringer's avatar Joe Stringer Committed by David S. Miller

openvswitch: Fix helper reference leak

If the actions (re)allocation fails, or the actions list is larger than the
maximum size, and the conntrack action is the last action when these
problems are hit, then references to helper modules may be leaked. Fix
the issue.

Fixes: cae3a262 ("openvswitch: Allow attaching helpers to ct action")
Signed-off-by: default avatarJoe Stringer <joe@ovn.org>
Acked-by: default avatarPravin B Shelar <pshelar@nicira.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 651df218
...@@ -53,6 +53,8 @@ struct ovs_conntrack_info { ...@@ -53,6 +53,8 @@ struct ovs_conntrack_info {
struct md_labels labels; struct md_labels labels;
}; };
static void __ovs_ct_free_action(struct ovs_conntrack_info *ct_info);
static u16 key_to_nfproto(const struct sw_flow_key *key) static u16 key_to_nfproto(const struct sw_flow_key *key)
{ {
switch (ntohs(key->eth.type)) { switch (ntohs(key->eth.type)) {
...@@ -708,7 +710,7 @@ int ovs_ct_copy_action(struct net *net, const struct nlattr *attr, ...@@ -708,7 +710,7 @@ int ovs_ct_copy_action(struct net *net, const struct nlattr *attr,
nf_conntrack_get(&ct_info.ct->ct_general); nf_conntrack_get(&ct_info.ct->ct_general);
return 0; return 0;
err_free_ct: err_free_ct:
nf_conntrack_free(ct_info.ct); __ovs_ct_free_action(&ct_info);
return err; return err;
} }
...@@ -750,6 +752,11 @@ void ovs_ct_free_action(const struct nlattr *a) ...@@ -750,6 +752,11 @@ void ovs_ct_free_action(const struct nlattr *a)
{ {
struct ovs_conntrack_info *ct_info = nla_data(a); struct ovs_conntrack_info *ct_info = nla_data(a);
__ovs_ct_free_action(ct_info);
}
static void __ovs_ct_free_action(struct ovs_conntrack_info *ct_info)
{
if (ct_info->helper) if (ct_info->helper)
module_put(ct_info->helper->me); module_put(ct_info->helper->me);
if (ct_info->ct) if (ct_info->ct)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment