• Andreas Steinmetz's avatar
    [PATCH] Fix RLIMIT_RTPRIO breakage · 18586e72
    Andreas Steinmetz authored
    RLIMIT_RTPRIO is supposed to grant non privileged users the right to use
    SCHED_FIFO/SCHED_RR scheduling policies with priorites bounded by the
    RLIMIT_RTPRIO value via sched_setscheduler(). This is usually used by
    audio users.
    
    Unfortunately this is broken in 2.6.13rc3 as you can see in the excerpt
    from sched_setscheduler below:
    
            /*
             * Allow unprivileged RT tasks to decrease priority:
             */
            if (!capable(CAP_SYS_NICE)) {
                    /* can't change policy */
                    if (policy != p->policy)
                            return -EPERM;
    
    After the above unconditional test which causes sched_setscheduler to
    fail with no regard to the RLIMIT_RTPRIO value the following check is made:
    
                   /* 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;
    
    Thus I do believe that the RLIMIT_RTPRIO value must be taken into
    account for the policy check, especially as the RLIMIT_RTPRIO limit is
    of no use without this change.
    
    The attached patch fixes this problem.
    Signed-off-by: default avatarAndreas Steinmetz <ast@domdv.de>
    Acked-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    18586e72
sched.c 130 KB