sched_setscheduler() behaviour changed??
Sergey Kandaurov
pluknet at gmail.com
Fri Feb 18 11:20:06 UTC 2011
On 17 February 2011 12:50, Mats Lindberg <mats.w.lindberg at gmail.com> wrote:
> All,
> I have been using a small program /rt) that utilize the sched_setscheduler()
> syscall to set the scheduling policy of a process to SCHED_RR. Been running
> it FBSD 5.x and 6.x. Now when migrating to FBSD 8.1 I get EPERM back at me.
> used to be able to run it like e.g.
>> ./rt -sr -p2 -- prog
>
> which started <prog> in SCHED_RR policy with priority 2.
>
> now in FBSD 8.1 I get EPERM
>
> But If I do
>> rtprio 10 ./rt -sr -p2 -- prog
>
> it I dont get EPERM.
>
> I'm always root when doing this.
>
> My problem is that I have customers that need to run their old 5.x 6.x
> applications 'as is' in 8.1 whithout changing anything.
>
[just thinking aloud]
Perhaps, you might have stumbled upon the change in
sched_setscheduler() restricting permission to superuser:
src/sys/posix4/p1003_1b.c#rev1.24.2.1
MFC revision 1.27.
Don't allow non-root user to set a scheduler policy.
@@ -195,6 +195,10 @@ int sched_setscheduler(struct thread *td
struct thread *targettd;
struct proc *targetp;
+ /* Don't allow non root user to set a scheduler policy */
+ if (suser(td) != 0)
+ return (EPERM);
+
e = copyin(uap->param, &sched_param, sizeof(sched_param));
if (e)
return (e);
--
wbr,
pluknet
More information about the freebsd-hackers
mailing list