Blob Blame History Raw
From: "Paul E. McKenney" <paulmck@kernel.org>
Date: Fri, 3 Jan 2020 16:14:08 -0800
Subject: rcu: Add READ_ONCE() to rcu_segcblist ->tails[]
Patch-mainline: v5.7-rc1
Git-commit: bfeebe24212d374f82bbf5b005371fe13acabb93
References: bsc#1171828

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>
Acked-by: Daniel Wagner <dwagner@suse.de>
---
 kernel/rcu/rcu_segcblist.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/kernel/rcu/rcu_segcblist.c
+++ b/kernel/rcu/rcu_segcblist.c
@@ -79,7 +79,7 @@ void rcu_segcblist_disable(struct rcu_se
 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]);
 }
 
 /*