• M
    rcu: Fix data-race due to atomic_t copy-by-value · 6cf539a8
    Marco Elver 提交于
    This fixes a data-race where `atomic_t dynticks` is copied by value. The
    copy is performed non-atomically, resulting in a data-race if `dynticks`
    is updated concurrently.
    
    This data-race was found with KCSAN:
    ==================================================================
    BUG: KCSAN: data-race in dyntick_save_progress_counter / rcu_irq_enter
    
    write to 0xffff989dbdbe98e0 of 4 bytes by task 10 on cpu 3:
     atomic_add_return include/asm-generic/atomic-instrumented.h:78 [inline]
     rcu_dynticks_snap kernel/rcu/tree.c:310 [inline]
     dyntick_save_progress_counter+0x43/0x1b0 kernel/rcu/tree.c:984
     force_qs_rnp+0x183/0x200 kernel/rcu/tree.c:2286
     rcu_gp_fqs kernel/rcu/tree.c:1601 [inline]
     rcu_gp_fqs_loop+0x71/0x880 kernel/rcu/tree.c:1653
     rcu_gp_kthread+0x22c/0x3b0 kernel/rcu/tree.c:1799
     kthread+0x1b5/0x200 kernel/kthread.c:255
     <snip>
    
    read to 0xffff989dbdbe98e0 of 4 bytes by task 154 on cpu 7:
     rcu_nmi_enter_common kernel/rcu/tree.c:828 [inline]
     rcu_irq_enter+0xda/0x240 kernel/rcu/tree.c:870
     irq_enter+0x5/0x50 kernel/softirq.c:347
     <snip>
    
    Reported by Kernel Concurrency Sanitizer on:
    CPU: 7 PID: 154 Comm: kworker/7:1H Not tainted 5.3.0+ #5
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    Workqueue: kblockd blk_mq_run_work_fn
    ==================================================================
    Signed-off-by: NMarco Elver <elver@google.com>
    Cc: Paul E. McKenney <paulmck@kernel.org>
    Cc: Josh Triplett <josh@joshtriplett.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Joel Fernandes <joel@joelfernandes.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: rcu@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Reviewed-by: NJoel Fernandes (Google) <joel@joelfernandes.org>
    Signed-off-by: NPaul E. McKenney <paulmck@kernel.org>
    6cf539a8
rcu.h 22.4 KB