Messages in this thread | | | Date | Wed, 23 Jul 2014 16:36:32 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH] sched: fix sched_setparam() policy=-1 logic |
| |
On Tue, Jul 22, 2014 at 11:27:41PM -0300, Daniel Bristot de Oliveira wrote: > The scheduler uses policy=-1 to preserve the current policy state to > implement sched_setparam(). But, as (int) -1 is equals to 0xffffffff, > it's matching the if (policy & SCHED_RESET_ON_FORK) on > _sched_setscheduler(). This match changes the policy value to an > invalid value, breaking the sched_setparam() syscall. > > This patch checks policy=-1 before check the SCHED_RESET_ON_FORK flag. > > The following program shows the bug: > > int main(void) > { > struct sched_param param = { > .sched_priority = 5, > }; > > sched_setscheduler(0, SCHED_FIFO, ¶m); > param.sched_priority = 1; > sched_setparam(0, ¶m); > param.sched_priority = 0; > sched_getparam(0, ¶m); > if (param.sched_priority != 1) > printf("failed priority setting (found %d instead of 1)\n", > param.sched_priority); > else > printf("priority setting fine\n"); > } > > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: Ingo Molnar <mingo@kernel.org> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: stable@vger.kernel.org # 3.14+ > Fixes: 7479f3c9cf67 "sched: Move SCHED_RESET_ON_FORK into attr::sched_flags" > Reviewed-by: Steven Rostedt <rostedt@goodmis.org> > Signed-off-by: Daniel Bristot de Oliveira <bristot@redhat.com>
Thanks!
| |