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
| ||
|
Date: Mon, 18 Dec 2006 12:56:32 +0100 From: Jarek Poplawski <jarkao2@...pl> To: linux-kernel@...r.kernel.org Cc: Ingo Molnar <mingo@...e.hu>, Andrew Morton <akpm@...l.org> Subject: [PATCH] lockdep: returns after DEBUG_LOCKS_WARN_ONs etc. Hello, If any of this proposals should be omitted or separated let me know. Regards, Jarek P. --- [PATCH] lockdep: returns after DEBUG_LOCKS_WARN_ONs etc. lockdep.c changes: - returns after DEBUG_LOCKS_WARN_ON added in 3 places - debug_locks checking after lookup_chain_cache() added in __lock_acquire() - locking for testing and changing global variable max_lockdep_depth added in __lock_acquire() - local_irq_save/restore() replaced by raw versions in debug_check_no_locks_freed() Signed-off-by: Jarek Poplawski <jarkao2@...pl> --- diff -Nurp linux-2.6.20-rc1-/kernel/lockdep.c linux-2.6.20-rc1/kernel/lockdep.c --- linux-2.6.20-rc1-/kernel/lockdep.c 2006-12-18 08:59:24.000000000 +0100 +++ linux-2.6.20-rc1/kernel/lockdep.c 2006-12-18 11:57:40.000000000 +0100 @@ -1293,7 +1293,8 @@ out_unlock_set: if (!subclass || force) lock->class_cache = class; - DEBUG_LOCKS_WARN_ON(class->subclass != subclass); + if (DEBUG_LOCKS_WARN_ON(class->subclass != subclass)) + return NULL; return class; } @@ -1308,7 +1309,8 @@ static inline int lookup_chain_cache(u64 struct list_head *hash_head = chainhashentry(chain_key); struct lock_chain *chain; - DEBUG_LOCKS_WARN_ON(!irqs_disabled()); + if (DEBUG_LOCKS_WARN_ON(!irqs_disabled())) + return 0; /* * We can walk it lock-free, because entries only get added * to the hash: @@ -1390,7 +1392,9 @@ static void check_chain_key(struct task_ return; } id = hlock->class - lock_classes; - DEBUG_LOCKS_WARN_ON(id >= MAX_LOCKDEP_KEYS); + if (DEBUG_LOCKS_WARN_ON(id >= MAX_LOCKDEP_KEYS)) + return; + if (prev_hlock && (prev_hlock->irq_context != hlock->irq_context)) chain_key = 0; @@ -2201,7 +2205,11 @@ out_calc_hash: if (!check_prevs_add(curr, hlock)) return 0; graph_unlock(); - } + + } else if (unlikely(!debug_locks)) + /* after lookup_chain_cache() */ + return 0; + curr->lockdep_depth++; check_chain_key(curr); if (unlikely(curr->lockdep_depth >= MAX_LOCK_DEPTH)) { @@ -2210,9 +2218,14 @@ out_calc_hash: printk("turning off the locking correctness validator.\n"); return 0; } + + if (!graph_lock()) + return 0; + if (unlikely(curr->lockdep_depth > max_lockdep_depth)) max_lockdep_depth = curr->lockdep_depth; + graph_unlock(); return 1; } @@ -2665,7 +2678,7 @@ void debug_check_no_locks_freed(const vo if (unlikely(!debug_locks)) return; - local_irq_save(flags); + raw_local_irq_save(flags); for (i = 0; i < curr->lockdep_depth; i++) { hlock = curr->held_locks + i; @@ -2679,7 +2692,7 @@ void debug_check_no_locks_freed(const vo print_freed_lock_bug(curr, mem_from, mem_to, hlock); break; } - local_irq_restore(flags); + raw_local_irq_restore(flags); } EXPORT_SYMBOL_GPL(debug_check_no_locks_freed); - 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