Bug 176935 - NPTL: Error checking in sched_setscheduler
Summary: NPTL: Error checking in sched_setscheduler
Alias: None
Product: Red Hat Enterprise Linux 4
Classification: Red Hat
Component: kernel
Version: 4.0
Hardware: i386
OS: Linux
Target Milestone: ---
: ---
Assignee: Jason Baron
QA Contact: Brian Brock
URL: http://nptl.bullopensource.org/Tests/...
Depends On:
TreeView+ depends on / blocked
Reported: 2006-01-04 15:27 UTC by Tony Reix
Modified: 2013-03-06 05:59 UTC (History)
3 users (show)

Clone Of:
Last Closed: 2012-06-20 16:12:19 UTC

Attachments (Terms of Use)

Description Tony Reix 2006-01-04 15:27:02 UTC
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.7.8) Gecko/20050524 Fedora/1.0.4-4 Firefox/1.0.4

Description of problem:
OPTS test:


 	Tests that an invalid policy cannot be passed to sched_setscheduler.

Details are available at:
Browse: (TC2) 2xi686HT - RHAS4u2 Run 1,2,3


Version-Release number of selected component (if applicable):
Unmodified RHEL4u2

How reproducible:

Steps to Reproduce:
(Used version was:  OPTS cvs repository on Nov 14, 2005)

Actual Results:  See:

Additional info:

Comment 1 Jakub Jelinek 2006-01-04 15:55:42 UTC
The test certainly goes beyond what the standard requires, nobody says that
policy number is invalid.
Reassigning to kernel, as glibc sched_setscheduler is just trivial wrapper
around kernel syscall.
And on Linux, policy < 0 means "use the previous policy".
If you pass 136 as policy value, it will certainly fail:
        if (policy < 0)
                policy = oldpolicy = p->policy;
        else {
                retval = -EINVAL;
                if (policy != SCHED_FIFO && policy != SCHED_RR &&
                                policy != SCHED_NORMAL)
                        goto out_unlock;

Comment 2 Tony Reix 2006-01-04 16:01:41 UTC
Use the 3 (correct !) URLS:


     Click the "Browse" button of : (TC2) 2xi686HT - RHAS4u2 Run 3
     You can also select 2 runs and click the "Compare Selected" button.

Comment 3 Jason Baron 2006-01-16 20:01:08 UTC
yes, setcheduler() treats negative values as 'use current policy', but that is
used to implement sys_sched_setparam(), see:

asmlinkage long sys_sched_setparam(pid_t pid, struct sched_param __user *param)
        return setscheduler(pid, -1, param);

I tend to agree that any invalid value for sched_setscheduler should return
-EINVAL. The manpage has:

EINVAL The scheduling policy is not one of  the  recognized  policies,  or  the
              parameter p does not make sense for the policy.

Therefore, i think the kernel should be changed as follows:

--- linux-2.6.9/kernel/sched.c.bak      2006-01-16 15:07:05.000000000 -0500
+++ linux-2.6.9/kernel/sched.c  2006-01-16 15:08:32.000000000 -0500
@@ -3406,6 +3406,10 @@ out_nounlock:
 asmlinkage long sys_sched_setscheduler(pid_t pid, int policy,
                                       struct sched_param __user *param)
+       /* negative values for policy are not valid */
+       if (policy < 0)
+               return -EINVAL;
        return setscheduler(pid, policy, param);

Comment 4 Ulrich Drepper 2006-01-16 20:16:48 UTC
Yes, the patch is correct and necessary.  This is a "shall" error which must be

Comment 5 Jiri Pallich 2012-06-20 16:12:19 UTC
Thank you for submitting this issue for consideration in Red Hat Enterprise Linux. The release for which you requested us to review is now End of Life. 
Please See https://access.redhat.com/support/policy/updates/errata/

If you would like Red Hat to re-consider your feature request for an active release, please re-open the request via appropriate support channels and provide additional supporting details about the importance of this issue.

Note You need to log in before you can comment on or make changes to this bug.