All of lore.kernel.org
 help / color / mirror / Atom feed
* [NETFILTER 2.4]: Fix deadlock on NAT helper unload
@ 2006-09-14 20:57 Patrick McHardy
  2006-10-07  9:50 ` Willy Tarreau
  0 siblings, 1 reply; 3+ messages in thread
From: Patrick McHardy @ 2006-09-14 20:57 UTC (permalink / raw)
  To: David S. Miller; +Cc: Netfilter Development Mailinglist

[-- Attachment #1: Type: text/plain, Size: 1 bytes --]



[-- Attachment #2: x --]
[-- Type: text/plain, Size: 1170 bytes --]

[NETFILTER]: Fix deadlock on NAT helper unload

When a NAT helper is unlocked conntrack/NAT may deadlock because of
the following lock sequence:

.. ip_nat_helper_unregister
-> ip_ct_selective_cleanup
-> get_next_corpse		(ip_conntrack_lock)
-> kill_helper			(ip_nat_lock)

.. ip_nat_fn			(ip_nat_lock)
-> ip_nat_setup_info
-> ip_conntrack_alter_reply	(ip_conntrack_lock)

Taking ip_nat_lock in kill_helper() is unnecessary since the helper assigned
to a connection is immutable and new connections can't have the helper that
is beeing unloaded assigned since it is already removed from the global list.

Reported by <doublefacer007@gmail.com>.

Signed-off-by: Patrick McHardy <kaber@trash.net>

--- a/net/ipv4/netfilter/ip_nat_helper.c	2006-09-03 16:41:53.000000000 +0200
+++ b/net/ipv4/netfilter/ip_nat_helper.c	2006-09-03 16:42:04.000000000 +0200
@@ -522,13 +522,7 @@
 static int
 kill_helper(const struct ip_conntrack *i, void *helper)
 {
-	int ret;
-
-	READ_LOCK(&ip_nat_lock);
-	ret = (i->nat.info.helper == helper);
-	READ_UNLOCK(&ip_nat_lock);
-
-	return ret;
+	return (i->nat.info.helper == helper);
 }
 
 void ip_nat_helper_unregister(struct ip_nat_helper *me)

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [NETFILTER 2.4]: Fix deadlock on NAT helper unload
  2006-09-14 20:57 [NETFILTER 2.4]: Fix deadlock on NAT helper unload Patrick McHardy
@ 2006-10-07  9:50 ` Willy Tarreau
  2006-10-08  4:44   ` David Miller
  0 siblings, 1 reply; 3+ messages in thread
From: Willy Tarreau @ 2006-10-07  9:50 UTC (permalink / raw)
  To: Patrick McHardy; +Cc: Netfilter Development Mailinglist, David S. Miller

Hi Patrick,

I missed this patch, and it seems David did not notice it either.
David, do you have any objection against it ? Otherwise I will
merge it.

Thanks,
Willy

On Thu, Sep 14, 2006 at 10:57:54PM +0200, Patrick McHardy wrote:
> [NETFILTER]: Fix deadlock on NAT helper unload
> When a NAT helper is unlocked conntrack/NAT may deadlock because of
> the following lock sequence:
> 
> .. ip_nat_helper_unregister
> -> ip_ct_selective_cleanup
> -> get_next_corpse		(ip_conntrack_lock)
> -> kill_helper			(ip_nat_lock)
> 
> .. ip_nat_fn			(ip_nat_lock)
> -> ip_nat_setup_info
> -> ip_conntrack_alter_reply	(ip_conntrack_lock)
> 
> Taking ip_nat_lock in kill_helper() is unnecessary since the helper assigned
> to a connection is immutable and new connections can't have the helper that
> is beeing unloaded assigned since it is already removed from the global list.
> 
> Reported by <doublefacer007@gmail.com>.
> 
> Signed-off-by: Patrick McHardy <kaber@trash.net>
> 
> --- a/net/ipv4/netfilter/ip_nat_helper.c	2006-09-03 16:41:53.000000000 +0200
> +++ b/net/ipv4/netfilter/ip_nat_helper.c	2006-09-03 16:42:04.000000000 +0200
> @@ -522,13 +522,7 @@
>  static int
>  kill_helper(const struct ip_conntrack *i, void *helper)
>  {
> -	int ret;
> -
> -	READ_LOCK(&ip_nat_lock);
> -	ret = (i->nat.info.helper == helper);
> -	READ_UNLOCK(&ip_nat_lock);
> -
> -	return ret;
> +	return (i->nat.info.helper == helper);
>  }
>  
>  void ip_nat_helper_unregister(struct ip_nat_helper *me)

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [NETFILTER 2.4]: Fix deadlock on NAT helper unload
  2006-10-07  9:50 ` Willy Tarreau
@ 2006-10-08  4:44   ` David Miller
  0 siblings, 0 replies; 3+ messages in thread
From: David Miller @ 2006-10-08  4:44 UTC (permalink / raw)
  To: w; +Cc: netfilter-devel, kaber

From: Willy Tarreau <w@1wt.eu>
Date: Sat, 7 Oct 2006 11:50:11 +0200

> I missed this patch, and it seems David did not notice it either.
> David, do you have any objection against it ? Otherwise I will
> merge it.

No objection, it's been rotting in my mailbox too, sorry:

Signed-off-by: David S. Miller <davem@davemloft.net>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-10-08  4:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-14 20:57 [NETFILTER 2.4]: Fix deadlock on NAT helper unload Patrick McHardy
2006-10-07  9:50 ` Willy Tarreau
2006-10-08  4:44   ` David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.