Patch "netfilter: xt_CT: fix refcnt leak on error path" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
netfilter: xt_CT: fix refcnt leak on error path
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
netfilter-xt_ct-fix-refcnt-leak-on-error-path.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Mar 22 14:40:23 CET 2018
From: Gao Feng <[email protected]>
Date: Fri, 14 Apr 2017 10:00:08 +0800
Subject: netfilter: xt_CT: fix refcnt leak on error path
From: Gao Feng <[email protected]>
[ Upstream commit 470acf55a021713869b9bcc967268ac90c8a0fac ]
There are two cases which causes refcnt leak.
1. When nf_ct_timeout_ext_add failed in xt_ct_set_timeout, it should free the timeout refcnt.
Now goto the err_put_timeout error handler instead of going ahead.
2. When the time policy is not found, we should call module_put. Otherwise, the related cthelper module cannot be removed anymore. It is easy to reproduce by typing the following command:
# iptables -t raw -A OUTPUT -p tcp -j CT --helper ftp --timeout xxx
--- net/netfilter/xt_CT.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
net/netfilter/xt_CT.c +9 -2
@@ -168,8 +168,10 @@ xt_ct_set_timeout(struct nf_conn *ct, co goto err_put_timeout; } timeout_ext =nf_ct_timeout_ext_add (ct, timeout,GFP_ATOMIC ); -if (timeout_ext ==NULL ) +if (!timeout_ext) { ret = -ENOMEM ; + goto err_put_timeout; + }rcu_read_unlock ();return ret;
@@ -201,6 +203,7 @@ static int xt_ct_tg_check(const struct x struct xt_ct_target_info_v1 *info) {struct nf_conntrack_zone zone; +struct nf_conn_help *help;struct nf_conn *ct;int ret = -EOPNOTSUPP ;
@@ -249,7 +252,7 @@ static int xt_ct_tg_check(const struct xif (info->timeout[0 ]) { ret =xt_ct_set_timeout (ct, par, info->timeout);if (ret <0 ) - goto err3; + goto err4; }__set_bit (IPS_CONFIRMED_BIT , &ct->status);nf_conntrack_get (&ct->ct_general);
@@ -257,6 +260,10 @@ out: info->ct = ct;return 0 ; +err4: + help =nfct_help (ct); +if (help) +module_put (help->helper->me); err3:nf_ct_tmpl_free (ct); err2:
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/netfilter-xt_ct-fix-refcnt-leak-on-error-path.patch