All of lore.kernel.org
 help / color / mirror / Atom feed
* ip_queue freeze with 2.6.9 RHEL4
@ 2005-07-20 20:35 Eric Leblond
  2005-07-20 21:42 ` Patrick McHardy
  0 siblings, 1 reply; 4+ messages in thread
From: Eric Leblond @ 2005-07-20 20:35 UTC (permalink / raw)
  To: netfilter-devel; +Cc: redhat-list

Hi,

I've found a reproductible kernel freeze on RHEL 4.

The method is the following. I use nufw 1.0.10 (http://www.nufw.org/) to
send an accept decision to ip_queue (Same nufw version works well on all
other systems). This is enough to freeze the computer in most cases. If
the freeze has not occured, then nufw process is a zombie. We can then
achieve a freeze by doing rmmod ip_queue.

I've tested redhat provided kernels 2.6.9-5 and 2.6.9-11 (SMP or not).
Servers are bi Xeon based computer, working well and already used by
other people for intensive testing on non-firewall tasks.

Is there known issues on some systems with 2.6.9 and ip_queue ? or is it
a RedHat problem ?

As I've used home build 2.6.9 with nufw quiet a long time on other
systems without problem, I think it could be related to RedHat
modifications of the kernel.

BR,
-- 
Eric Leblond <eric@inl.fr>

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

* Re: ip_queue freeze with 2.6.9 RHEL4
  2005-07-20 20:35 ip_queue freeze with 2.6.9 RHEL4 Eric Leblond
@ 2005-07-20 21:42 ` Patrick McHardy
  2005-07-21  7:39   ` Eric Leblond
  0 siblings, 1 reply; 4+ messages in thread
From: Patrick McHardy @ 2005-07-20 21:42 UTC (permalink / raw)
  To: Eric Leblond; +Cc: netfilter-devel, redhat-list

Eric Leblond wrote:
> Is there known issues on some systems with 2.6.9 and ip_queue ? or is it
> a RedHat problem ?

In which hook are you queueing packets? Does it freeze immediately, or
do you need to reinject the packet first?

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

* Re: ip_queue freeze with 2.6.9 RHEL4
  2005-07-20 21:42 ` Patrick McHardy
@ 2005-07-21  7:39   ` Eric Leblond
  2005-07-21  7:44     ` Patrick McHardy
  0 siblings, 1 reply; 4+ messages in thread
From: Eric Leblond @ 2005-07-21  7:39 UTC (permalink / raw)
  To: Patrick McHardy; +Cc: netfilter-devel, redhat-list

Le mercredi 20 juillet 2005 à 23:42 +0200, Patrick McHardy a écrit :
> Eric Leblond wrote:
> > Is there known issues on some systems with 2.6.9 and ip_queue ? or is it
> > a RedHat problem ?
> 
> In which hook are you queueing packets? 

I've got one rule only :
	iptables -A INPUT -p tcp --dport 22 --syn -j ACCEPT

Same "ruleset" works correctly with test done with RHEL3 the same day
(almost same hardware) 

> Does it freeze immediately, or
> do you need to reinject the packet first?

It freezes just after I send the NF_ACCEPT decision.

BR,
-- 
Eric Leblond <eric@inl.fr>

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

* Re: ip_queue freeze with 2.6.9 RHEL4
  2005-07-21  7:39   ` Eric Leblond
@ 2005-07-21  7:44     ` Patrick McHardy
  0 siblings, 0 replies; 4+ messages in thread
From: Patrick McHardy @ 2005-07-21  7:44 UTC (permalink / raw)
  To: Eric Leblond; +Cc: netfilter-devel, redhat-list

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

Eric Leblond wrote:
> I've got one rule only :
> 	iptables -A INPUT -p tcp --dport 22 --syn -j ACCEPT
>
> It freezes just after I send the NF_ACCEPT decision.

This looks like a problem we've already fixed in current kernels. Please
try this patch.


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

[NETFILTER]: Fix deadlock with ip_queue and tcp local input path.

When we have ip_queue being used from LOCAL_IN, then we end up with a
situation where the verdicts coming back from userspace traverse the TCP
input path from syscall context.  While this seems to work most of the
time, there's an ugly deadlock:

syscall context is interrupted by the timer interrupt.  When the timer
interrupt leaves, the timer softirq get's scheduled and calls
tcp_delack_timer() and alike.  They themselves do bh_lock_sock(sk),
which is already held from somewhere else -> boom.

I've now tested the suggested solution by Patrick McHardy and Herbert Xu to
simply use local_bh_{en,dis}able().

Signed-off-by: Harald Welte <laforge@netfilter.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

---
commit 9bb7bc942d3da606f184ac6a4dfc7e4d470c831b
tree dc310200df5988d4c71c346baad6a923a4bdeb9d
parent 5e485b7975472ba4a408523deb6541e70c451842
author Harald Welte <laforge@netfilter.org> Mon, 30 May 2005 15:35:26 -0700
committer David S. Miller <davem@davemloft.net> Mon, 30 May 2005 15:35:26 -0700

 net/ipv4/netfilter/ip_queue.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/net/ipv4/netfilter/ip_queue.c b/net/ipv4/netfilter/ip_queue.c
--- a/net/ipv4/netfilter/ip_queue.c
+++ b/net/ipv4/netfilter/ip_queue.c
@@ -3,6 +3,7 @@
  * communicating with userspace via netlink.
  *
  * (C) 2000-2002 James Morris <jmorris@intercode.com.au>
+ * (C) 2003-2005 Netfilter Core Team <coreteam@netfilter.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -17,6 +18,7 @@
  * 2005-01-10: Added /proc counter for dropped packets; fixed so
  *             packets aren't delivered to user space if they're going 
  *             to be dropped. 
+ * 2005-05-26: local_bh_{disable,enable} around nf_reinject (Harald Welte)
  *
  */
 #include <linux/module.h>
@@ -71,7 +73,15 @@ static DECLARE_MUTEX(ipqnl_sem);
 static void
 ipq_issue_verdict(struct ipq_queue_entry *entry, int verdict)
 {
+	/* TCP input path (and probably other bits) assume to be called
+	 * from softirq context, not from syscall, like ipq_issue_verdict is
+	 * called.  TCP input path deadlocks with locks taken from timer
+	 * softirq, e.g.  We therefore emulate this by local_bh_disable() */
+
+	local_bh_disable();
 	nf_reinject(entry->skb, entry->info, verdict);
+	local_bh_enable();
+
 	kfree(entry);
 }
 

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

end of thread, other threads:[~2005-07-21  7:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-07-20 20:35 ip_queue freeze with 2.6.9 RHEL4 Eric Leblond
2005-07-20 21:42 ` Patrick McHardy
2005-07-21  7:39   ` Eric Leblond
2005-07-21  7:44     ` Patrick McHardy

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.