mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-19 21:21:09 +00:00
rcu: Use READ_ONCE() for ->expmask in rcu_read_unlock_special()
The rcu_node structure's ->expmask field is updated only when holding the ->lock, but is also accessed locklessly. This means that all ->expmask updates must use WRITE_ONCE() and all reads carried out without holding ->lock must use READ_ONCE(). This commit therefore changes the lockless ->expmask read in rcu_read_unlock_special() to use READ_ONCE(). Reported-by: syzbot+99f4ddade3c22ab0cf23@syzkaller.appspotmail.com Signed-off-by: Paul E. McKenney <paulmck@kernel.org> Acked-by: Marco Elver <elver@google.com>
This commit is contained in:
parent
3717e1e9f2
commit
c51f83c315
1 changed files with 1 additions and 1 deletions
|
@ -599,7 +599,7 @@ static void rcu_read_unlock_special(struct task_struct *t)
|
||||||
struct rcu_node *rnp = rdp->mynode;
|
struct rcu_node *rnp = rdp->mynode;
|
||||||
|
|
||||||
exp = (t->rcu_blocked_node && t->rcu_blocked_node->exp_tasks) ||
|
exp = (t->rcu_blocked_node && t->rcu_blocked_node->exp_tasks) ||
|
||||||
(rdp->grpmask & rnp->expmask) ||
|
(rdp->grpmask & READ_ONCE(rnp->expmask)) ||
|
||||||
tick_nohz_full_cpu(rdp->cpu);
|
tick_nohz_full_cpu(rdp->cpu);
|
||||||
// Need to defer quiescent state until everything is enabled.
|
// Need to defer quiescent state until everything is enabled.
|
||||||
if (irqs_were_disabled && use_softirq &&
|
if (irqs_were_disabled && use_softirq &&
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue