android_kernel_motorola_sm6225/kernel/rcu
Dennis Krein b57b3b0082 srcu: Lock srcu_data structure in srcu_gp_start()
commit eb4c2382272ae7ae5d81fdfa5b7a6c86146eaaa4 upstream.

The srcu_gp_start() function is called with the srcu_struct structure's
->lock held, but not with the srcu_data structure's ->lock.  This is
problematic because this function accesses and updates the srcu_data
structure's ->srcu_cblist, which is protected by that lock.  Failing to
hold this lock can result in corruption of the SRCU callback lists,
which in turn can result in arbitrarily bad results.

This commit therefore makes srcu_gp_start() acquire the srcu_data
structure's ->lock across the calls to rcu_segcblist_advance() and
rcu_segcblist_accelerate(), thus preventing this corruption.

Reported-by: Bart Van Assche <bvanassche@acm.org>
Reported-by: Christoph Hellwig <hch@infradead.org>
Reported-by: Sebastian Kuzminsky <seb.kuzminsky@gmail.com>
Signed-off-by: Dennis Krein <Dennis.Krein@netapp.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
Tested-by: Dennis Krein <Dennis.Krein@netapp.com>
Cc: <stable@vger.kernel.org> # 4.16.x
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-01-13 09:51:06 +01:00
..
Kconfig rcu: Drive TASKS_RCU directly off of PREEMPT 2017-08-17 07:26:04 -07:00
Kconfig.debug rcu: Move RCU debug Kconfig options to kernel/rcu 2017-06-08 18:52:44 -07:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
rcu.h Merge branches 'fixes1.2018.07.12b' and 'torture1.2018.07.12b' into HEAD 2018-07-12 15:42:41 -07:00
rcu_segcblist.c rcu: Simplify and inline cpu_needs_another_gp() 2018-05-15 10:30:59 -07:00
rcu_segcblist.h rcu: Simplify and inline cpu_needs_another_gp() 2018-05-15 10:30:59 -07:00
rcuperf.c Merge branches 'fixes1.2018.07.12b' and 'torture1.2018.07.12b' into HEAD 2018-07-12 15:42:41 -07:00
rcutorture.c Merge branches 'fixes1.2018.07.12b' and 'torture1.2018.07.12b' into HEAD 2018-07-12 15:42:41 -07:00
srcutiny.c sched/swait: Rename to exclusive 2018-06-20 11:35:56 +02:00
srcutree.c srcu: Lock srcu_data structure in srcu_gp_start() 2019-01-13 09:51:06 +01:00
sync.c doc: Fix various RCU docbook comment-header problems 2017-10-19 22:26:11 -04:00
tiny.c rcu: Improve rcu_note_voluntary_context_switch() reporting 2018-07-12 15:39:12 -07:00
tree.c rcu: Make need_resched() respond to urgent RCU-QS needs 2018-12-01 09:37:34 +01:00
tree.h rcu: Remove unused rcu_kick_nohz_cpu() function 2018-07-12 15:39:17 -07:00
tree_exp.h Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2018-08-13 11:25:07 -07:00
tree_plugin.h Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2018-08-13 11:25:07 -07:00
update.c rcu: Add comment to the last sleep in the rcu tasks loop 2018-07-12 15:39:21 -07:00