• Peter Zijlstra's avatar
    lockdep: Make print_lock() robust against concurrent release · d7bc3197
    Peter Zijlstra authored
    During sysrq's show-held-locks command it is possible that
    hlock_class() returns NULL for a given lock. The result is then (after
    the warning):
    
    	|BUG: unable to handle kernel NULL pointer dereference at 0000001c
    	|IP: [<c1088145>] get_usage_chars+0x5/0x100
    	|Call Trace:
    	| [<c1088263>] print_lock_name+0x23/0x60
    	| [<c1576b57>] print_lock+0x5d/0x7e
    	| [<c1088314>] lockdep_print_held_locks+0x74/0xe0
    	| [<c1088652>] debug_show_all_locks+0x132/0x1b0
    	| [<c1315c48>] sysrq_handle_showlocks+0x8/0x10
    
    This *might* happen because the thread on the other CPU drops the lock
    after we are looking ->lockdep_depth and ->held_locks points no longer
    to a lock that is held.
    
    The fix here is to simply ignore it and continue.
    Reported-by: default avatarAndreas Messerschmid <andreas@linutronix.de>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    d7bc3197
lockdep.c 105 KB