• Bart Van Assche's avatar
    locking/lockdep: Zap lock classes even with lock debugging disabled · 90c1cba2
    Bart Van Assche authored
    The following commit:
    
      a0b0fd53 ("locking/lockdep: Free lock classes that are no longer in use")
    
    changed the behavior of lockdep_free_key_range() from
    unconditionally zapping lock classes into only zapping lock classes if
    debug_lock == true. Not zapping lock classes if debug_lock == false leaves
    dangling pointers in several lockdep datastructures, e.g. lock_class::name
    in the all_lock_classes list.
    
    The shell command "cat /proc/lockdep" causes the kernel to iterate the
    all_lock_classes list. Hence the "unable to handle kernel paging request" cash
    that Shenghui encountered by running cat /proc/lockdep.
    
    Since the new behavior can cause cat /proc/lockdep to crash, restore the
    pre-v5.1 behavior.
    
    This patch avoids that cat /proc/lockdep triggers the following crash
    with debug_lock == false:
    
      BUG: unable to handle kernel paging request at fffffbfff40ca448
      RIP: 0010:__asan_load1+0x28/0x50
      Call Trace:
       string+0xac/0x180
       vsnprintf+0x23e/0x820
       seq_vprintf+0x82/0xc0
       seq_printf+0x92/0xb0
       print_name+0x34/0xb0
       l_show+0x184/0x200
       seq_read+0x59e/0x6c0
       proc_reg_read+0x11f/0x170
       __vfs_read+0x4d/0x90
       vfs_read+0xc5/0x1f0
       ksys_read+0xab/0x130
       __x64_sys_read+0x43/0x50
       do_syscall_64+0x71/0x210
       entry_SYSCALL_64_after_hwframe+0x49/0xbe
    Reported-by: default avatarshenghui <shhuiw@foxmail.com>
    Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Waiman Long <longman@redhat.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Fixes: a0b0fd53 ("locking/lockdep: Free lock classes that are no longer in use") # v5.1-rc1.
    Link: https://lkml.kernel.org/r/20190403233552.124673-1-bvanassche@acm.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    90c1cba2
lockdep.c 127 KB