From 63aa9c14de217cecd556e2df5a17bea1e37aa1b7 Mon Sep 17 00:00:00 2001 From: Olivier Croquette Date: Sat, 25 Jun 2005 14:57:32 -0700 Subject: [PATCH] --- yaml --- r: 3303 b: refs/heads/master c: 37e4ab3f0cba13adf3535d373fd98e5ee47b5410 h: refs/heads/master i: 3301: ac90ebfb20fa3eb4edcf2ad57d73e533468e2f81 3299: b1e50c9c3c2dd3c373090cd667e083603e21f8dd 3295: ff2490506aa8058cc67c5bf2bd372e0b38c863c2 v: v3 --- [refs] | 2 +- trunk/kernel/sched.c | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 25ba72ec3748..f3b5ffd0cf15 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a3464a102a69a4e00efb0a763e274ce290995b4b +refs/heads/master: 37e4ab3f0cba13adf3535d373fd98e5ee47b5410 diff --git a/trunk/kernel/sched.c b/trunk/kernel/sched.c index a3d1c8e43d34..d3d81b82e378 100644 --- a/trunk/kernel/sched.c +++ b/trunk/kernel/sched.c @@ -3531,13 +3531,24 @@ int sched_setscheduler(struct task_struct *p, int policy, struct sched_param *pa if ((policy == SCHED_NORMAL) != (param->sched_priority == 0)) return -EINVAL; - if ((policy == SCHED_FIFO || policy == SCHED_RR) && - param->sched_priority > p->signal->rlim[RLIMIT_RTPRIO].rlim_cur && - !capable(CAP_SYS_NICE)) - return -EPERM; - if ((current->euid != p->euid) && (current->euid != p->uid) && - !capable(CAP_SYS_NICE)) - return -EPERM; + /* + * Allow unprivileged RT tasks to decrease priority: + */ + if (!capable(CAP_SYS_NICE)) { + /* can't change policy */ + if (policy != p->policy) + return -EPERM; + /* can't increase priority */ + if (policy != SCHED_NORMAL && + param->sched_priority > p->rt_priority && + param->sched_priority > + p->signal->rlim[RLIMIT_RTPRIO].rlim_cur) + return -EPERM; + /* can't change other user's priorities */ + if ((current->euid != p->euid) && + (current->euid != p->uid)) + return -EPERM; + } retval = security_task_setscheduler(p, policy, param); if (retval)