• Marco Elver's avatar
    kcsan: Make KCSAN compatible with lockdep · f1bc9621
    Marco Elver authored
    We must avoid any recursion into lockdep if KCSAN is enabled on utilities
    used by lockdep. One manifestation of this is corruption of lockdep's
    IRQ trace state (if TRACE_IRQFLAGS), resulting in spurious warnings
    (see below).  This commit fixes this by:
    
    1. Using raw_local_irq{save,restore} in kcsan_setup_watchpoint().
    2. Disabling lockdep in kcsan_report().
    
    Tested with:
    
      CONFIG_LOCKDEP=y
      CONFIG_DEBUG_LOCKDEP=y
      CONFIG_TRACE_IRQFLAGS=y
    
    This fix eliminates spurious warnings such as the following one:
    
        WARNING: CPU: 0 PID: 2 at kernel/locking/lockdep.c:4406 check_flags.part.0+0x101/0x220
        Modules linked in:
        CPU: 0 PID: 2 Comm: kthreadd Not tainted 5.5.0-rc1+ #11
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
        RIP: 0010:check_flags.part.0+0x101/0x220
        <snip>
        Call Trace:
         lock_is_held_type+0x69/0x150
         freezer_fork+0x20b/0x370
         cgroup_post_fork+0x2c9/0x5c0
         copy_process+0x2675/0x3b40
         _do_fork+0xbe/0xa30
         ? _raw_spin_unlock_irqrestore+0x40/0x50
         ? match_held_lock+0x56/0x250
         ? kthread_park+0xf0/0xf0
         kernel_thread+0xa6/0xd0
         ? kthread_park+0xf0/0xf0
         kthreadd+0x321/0x3d0
         ? kthread_create_on_cpu+0x130/0x130
         ret_from_fork+0x3a/0x50
        irq event stamp: 64
        hardirqs last  enabled at (63): [<ffffffff9a7995d0>] _raw_spin_unlock_irqrestore+0x40/0x50
        hardirqs last disabled at (64): [<ffffffff992a96d2>] kcsan_setup_watchpoint+0x92/0x460
        softirqs last  enabled at (32): [<ffffffff990489b8>] fpu__copy+0xe8/0x470
        softirqs last disabled at (30): [<ffffffff99048939>] fpu__copy+0x69/0x470
    Reported-by: default avatarQian Cai <cai@lca.pw>
    Signed-off-by: default avatarMarco Elver <elver@google.com>
    Acked-by: default avatarAlexander Potapenko <glider@google.com>
    Tested-by: default avatarQian Cai <cai@lca.pw>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    f1bc9621
Makefile 1.21 KB