Commit 1d29740b authored by Zheng Zucheng's avatar Zheng Zucheng Committed by Yang Yingliang
Browse files

sched: Fix throttle offline task trigger panic

hulk inclusion
category: bugfix
bugzilla: 51828, https://gitee.com/openeuler/kernel/issues/I4K96G


CVE: NA

--------------------------------

offline task invokes sched_setscheduler interface to change the
scheduling policy to SCHED_OTHER, trigger a system panic.

Signed-off-by: default avatarZheng Zucheng <zhengzucheng@huawei.com>
Reviewed-by: default avatarChen Hui <judy.chenhui@huawei.com>
Reviewed-by: default avatarXiu Jianfeng <xiujianfeng@huawei.com>
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
parent 2f9034b2
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -4333,6 +4333,18 @@ static int __sched_setscheduler(struct task_struct *p,
	}
change:

#ifdef CONFIG_QOS_SCHED
	/*
	 * If the scheduling policy of an offline task is set to a policy
	 * other than SCHED_IDLE, the online task preemption will be invalid,
	 * so return -EINVAL in this case.
	 */
	if (unlikely(task_group(p)->qos_level == -1 && !idle_policy(policy))) {
		task_rq_unlock(rq, p, &rf);
		return -EINVAL;
	}
#endif

	if (user) {
#ifdef CONFIG_RT_GROUP_SCHED
		/*
+2 −1
Original line number Diff line number Diff line
@@ -6991,7 +6991,8 @@ static bool check_qos_cfs_rq(struct cfs_rq *cfs_rq)
		return false;

	if (cfs_rq && cfs_rq->tg->qos_level < 0 &&
	    !sched_idle_cpu(cpu_of(rq_of(cfs_rq)))) {
	    !sched_idle_cpu(cpu_of(rq_of(cfs_rq))) &&
	     cfs_rq->h_nr_running == cfs_rq->idle_h_nr_running) {
		throttle_qos_cfs_rq(cfs_rq);
		return true;
	}