]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
rcu: Add READ_ONCE() to rcu_segcblist ->tails[]
authorPaul E. McKenney <paulmck@kernel.org>
Sat, 4 Jan 2020 00:14:08 +0000 (16:14 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Thu, 20 Feb 2020 23:58:22 +0000 (15:58 -0800)
The rcu_segcblist structure's ->tails[] array entries are read
locklessly, so this commit adds the READ_ONCE() to a load in order to
avoid destructive compiler optimizations.

This data race was reported by KCSAN.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/rcu_segcblist.c

index 5f4fd3b8777cafdd74ae67fb61a9be8d48b1f65d..426a472e73081a2e6543e57b511cf9565b84c70b 100644 (file)
@@ -182,7 +182,7 @@ void rcu_segcblist_offload(struct rcu_segcblist *rsclp)
 bool rcu_segcblist_ready_cbs(struct rcu_segcblist *rsclp)
 {
        return rcu_segcblist_is_enabled(rsclp) &&
-              &rsclp->head != rsclp->tails[RCU_DONE_TAIL];
+              &rsclp->head != READ_ONCE(rsclp->tails[RCU_DONE_TAIL]);
 }
 
 /*