Red Hat Bugzilla – Bug 176935
NPTL: Error checking in sched_setscheduler
Last modified: 2013-03-06 00:59:22 EST
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:
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):
Steps to Reproduce:
(Used version was: OPTS cvs repository on Nov 14, 2005)
Actual Results: See:
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;
retval = -EINVAL;
if (policy != SCHED_FIFO && policy != SCHED_RR &&
policy != SCHED_NORMAL)
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.
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);
Yes, the patch is correct and necessary. This is a "shall" error which must be
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.