| From stable-bounces@linux.kernel.org Tue Nov 8 13:15:57 2005 |
| Date: Tue, 8 Nov 2005 23:16:08 +0200 (EET) |
| From: Julian Anastasov <ja@ssi.bg> |
| To: stable@kernel.org |
| Cc: "David S. Miller" <davem@davemloft.net>, Roberto Nibali <ratz@drugphish.ch> |
| Subject: [PATCH] ipvs: fix connection leak if expire_nodest_conn=1 |
| |
| |
| There was a fix in 2.6.13 that changed the behaviour of |
| ip_vs_conn_expire_now function not to put reference to connection, its |
| callers should hold write lock or connection refcnt. But we forgot to |
| convert one caller, when the real server for connection is unavailable |
| caller should put the connection reference. It happens only when sysctl |
| var expire_nodest_conn is set to 1 and such connections never expire. |
| Thanks to Roberto Nibali who found the problem and tested a 2.4.32-rc2 |
| patch, which is equal to this 2.6 version. |
| |
| Signed-off-by: Julian Anastasov <ja@ssi.bg> |
| Signed-off-by: Roberto Nibali <ratz@drugphish.ch> |
| Signed-off-by: Chris Wright <chrisw@osdl.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| --- |
| net/ipv4/ipvs/ip_vs_core.c | 7 +++---- |
| 1 file changed, 3 insertions(+), 4 deletions(-) |
| |
| --- linux-2.6.14.1.orig/net/ipv4/ipvs/ip_vs_core.c |
| +++ linux-2.6.14.1/net/ipv4/ipvs/ip_vs_core.c |
| @@ -1009,11 +1009,10 @@ ip_vs_in(unsigned int hooknum, struct sk |
| if (sysctl_ip_vs_expire_nodest_conn) { |
| /* try to expire the connection immediately */ |
| ip_vs_conn_expire_now(cp); |
| - } else { |
| - /* don't restart its timer, and silently |
| - drop the packet. */ |
| - __ip_vs_conn_put(cp); |
| } |
| + /* don't restart its timer, and silently |
| + drop the packet. */ |
| + __ip_vs_conn_put(cp); |
| return NF_DROP; |
| } |
| |