From 57804174133dfea5c442a67272af148921f9f8ee Mon Sep 17 00:00:00 2001 From: Yihao Wu Date: Thu, 30 Jul 2020 12:10:35 +0800 Subject: [PATCH 2040/2944] alinux: Fix latency histogram & nr_migrations rcu bugs to #29558346 rcu variable can be NULL inside rcu lock region, if rcu_read_lock is called in grace period. So check if (!variable) before dereference it. Signed-off-by: Yihao Wu Acked-by: Shanpei Chen --- kernel/sched/cpuacct.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c index 5eb58f4..b85b01d 100644 --- a/kernel/sched/cpuacct.c +++ b/kernel/sched/cpuacct.c @@ -247,7 +247,8 @@ void task_ca_increase_nr_migrations(struct task_struct *tsk) rcu_read_lock(); ca = task_ca(tsk); - this_cpu_ptr(ca->alistats)->nr_migrations++; + if (ca) + this_cpu_ptr(ca->alistats)->nr_migrations++; rcu_read_unlock(); } @@ -263,6 +264,10 @@ void task_ca_update_block(struct task_struct *tsk, u64 runtime) rcu_read_lock(); ca = task_ca(tsk); + if (!ca) { + rcu_read_unlock(); + return; + } if (tsk->in_iowait) s = SCHED_LAT_IOBLOCK; else @@ -290,6 +295,10 @@ void cpuacct_update_latency(struct sched_entity *se, u64 delta) rcu_read_lock(); tg = se->cfs_rq->tg; ca = cgroup_ca(tg->css.cgroup); + if (!ca) { + rcu_read_unlock(); + return; + } if (entity_is_task(se)) s = SCHED_LAT_WAIT; else -- 1.8.3.1