]> git.baikalelectronics.ru Git - kernel.git/commit
rcu: Avoid rcu_print_detail_task_stall_rnp() segfault
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Fri, 10 Aug 2012 23:00:11 +0000 (16:00 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Sun, 23 Sep 2012 14:42:50 +0000 (07:42 -0700)
commit5416d3b3d072fd620de341a94f2c503b3bfe3c21
tree89e0113e51e255dac69a726ada08044d461a0c18
parent6d10bbd39d5c7b8e47eae2095c02a76b18a5c8c3
rcu: Avoid rcu_print_detail_task_stall_rnp() segfault

The rcu_print_detail_task_stall_rnp() function invokes
rcu_preempt_blocked_readers_cgp() to verify that there are some preempted
RCU readers blocking the current grace period outside of the protection
of the rcu_node structure's ->lock.  This means that the last blocked
reader might exit its RCU read-side critical section and remove itself
from the ->blkd_tasks list before the ->lock is acquired, resulting in
a segmentation fault when the subsequent code attempts to dereference
the now-NULL gp_tasks pointer.

This commit therefore moves the test under the lock.  This will not
have measurable effect on lock contention because this code is invoked
only when printing RCU CPU stall warnings, in other words, in the common
case, never.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/rcutree_plugin.h