rcu: Use *_ONCE() to protect lockless ->expmask accesses
authorPaul E. McKenney <paulmck@kernel.org>
Tue, 8 Oct 2019 01:53:18 +0000 (18:53 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 9 Dec 2019 20:24:56 +0000 (12:24 -0800)
commit15c7c972cd26d89a26788e609c53b5a465324a6c
treea974bdc151ac35db62b8b5bf9c5fff7a05a7a190
parente42617b825f8073569da76dc4510bfa019b1c35a
rcu: Use *_ONCE() to protect lockless ->expmask accesses

The rcu_node structure's ->expmask field is accessed locklessly when
starting a new expedited grace period and when reporting an expedited
RCU CPU stall warning.  This commit therefore handles the former by
taking a snapshot of ->expmask while the lock is held and the latter
by applying READ_ONCE() to lockless reads and WRITE_ONCE() to the
corresponding updates.

Link: https://lore.kernel.org/lkml/CANpmjNNmSOagbTpffHr4=Yedckx9Rm2NuGqC9UqE+AOz5f1-ZQ@mail.gmail.com
Reported-by: syzbot+134336b86f728d6e55a0@syzkaller.appspotmail.com
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Acked-by: Marco Elver <elver@google.com>
kernel/rcu/tree_exp.h