Messages in this thread Patch in this message | | | From | Muchun Song <> | Subject | [PATCH] sched/fair: Fix call walk_tg_tree_from() without hold rcu_lock | Date | Mon, 6 Apr 2020 20:10:08 +0800 |
| |
The walk_tg_tree_from() caller must hold rcu_lock, but the caller do not call rcu_read_lock() in the unthrottle_cfs_rq(). The unthrottle_cfs_rq() is used in 3 places. There are distribute_cfs_runtime(), unthrottle_offline_cfs_rqs() and tg_set_cfs_bandwidth(). The former 2 already hold the rcu lock, but the last one does not. So fix it with calling rcu_read_lock() in the unthrottle_cfs_rq().
Signed-off-by: Muchun Song <songmuchun@bytedance.com> --- kernel/sched/fair.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 6f05843c76d7d..870853c47b63c 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4782,7 +4782,9 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq) raw_spin_unlock(&cfs_b->lock); /* update hierarchical throttle state */ + rcu_read_lock(); walk_tg_tree_from(cfs_rq->tg, tg_nop, tg_unthrottle_up, (void *)rq); + rcu_read_unlock(); if (!cfs_rq->load.weight) return; -- 2.11.0
| |