lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Sun, 1 Oct 2006 00:05:05 +0200
From:	Ingo Molnar <mingo@...e.hu>
To:	Eric Rannaud <eric.rannaud@...il.com>
Cc:	Andrew Morton <akpm@...l.org>, linux-kernel@...r.kernel.org,
	Linus Torvalds <torvalds@...l.org>, nagar@...son.ibm.com
Subject: Re: BUG-lockdep and freeze (was: Arrr! Linux 2.6.18)


* Eric Rannaud <eric.rannaud@...il.com> wrote:

> On 9/30/06, Andrew Morton <akpm@...l.org> wrote:
> >You could set CONFIG_UNWIND_INFO=n and CONFIG_STACK_UNWIND=n and reenable
> >lockdep.  That will a) tell us if there's some lockdep problem and b) will
> >give us a clearer look at any locking problems which your kernel is
> >detecting.
> 
> 
> All right. Here is the stacktrace I get with config
> CONFIG_UNWIND_INFO=n and CONFIG_STACK_UNWIND=n and v2.6.18 (all the
> rest being equal  http://engm.ath.cx/kernel/config-2.6.18). (and no
> freeze)

hm, does the patch below solve it? In general, lockdep warnings are 
intended to be non-fatal, so i have put in various practical limits on 
internal data structure failure modes. We havent had a /single/ 
lockdep-internal crash ever since lockdep went upstream [the unwinder 
crashes are outside of lockdep], and that's largely due to the good 
internal checks it does.

Recursion within the dependency graph is currently limited to 20, that's 
probably not enough on your box - this patch doubles it to 40. I have 
written the lockdep functions to have as small stackframes as possible, 
so 40 should be OK too. (The practical recursion limit should be 
somewhere between 100 and 200 entries. If we hit that then i'll change 
the algorithm to be iteration-based. Graph walking logic is so easy to 
program via recursion, so i'd like to keep recursion as long as 
possible.)

	Ingo

---------------->
Subject: lockdep: increase max allowed recursion depth
From: Ingo Molnar <mingo@...e.hu>

With lots of CPUs there can be lots of deep dependencies. Will change 
the algorithm to iteration-based if it gets too deep.

Signed-off-by: Ingo Molnar <mingo@...e.hu>
---
 kernel/lockdep.c |    8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

Index: linux/kernel/lockdep.c
===================================================================
--- linux.orig/kernel/lockdep.c
+++ linux/kernel/lockdep.c
@@ -575,6 +575,8 @@ static noinline int print_circular_bug_t
 	return 0;
 }
 
+#define RECURSION_LIMIT 40
+
 static int noinline print_infinite_recursion_bug(void)
 {
 	__raw_spin_unlock(&hash_lock);
@@ -595,7 +597,7 @@ check_noncircular(struct lock_class *sou
 	debug_atomic_inc(&nr_cyclic_check_recursions);
 	if (depth > max_recursion_depth)
 		max_recursion_depth = depth;
-	if (depth >= 20)
+	if (depth >= RECURSION_LIMIT)
 		return print_infinite_recursion_bug();
 	/*
 	 * Check this lock's dependency list:
@@ -645,7 +647,7 @@ find_usage_forwards(struct lock_class *s
 
 	if (depth > max_recursion_depth)
 		max_recursion_depth = depth;
-	if (depth >= 20)
+	if (depth >= RECURSION_LIMIT)
 		return print_infinite_recursion_bug();
 
 	debug_atomic_inc(&nr_find_usage_forwards_checks);
@@ -684,7 +686,7 @@ find_usage_backwards(struct lock_class *
 
 	if (depth > max_recursion_depth)
 		max_recursion_depth = depth;
-	if (depth >= 20)
+	if (depth >= RECURSION_LIMIT)
 		return print_infinite_recursion_bug();
 
 	debug_atomic_inc(&nr_find_usage_backwards_checks);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ