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@xxxxxxxxxxxxx> > Cc: Ingo Molnar <mingo@xxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx # 3.14+ > Fixes: 7479f3c9cf67 "sched: Move SCHED_RESET_ON_FORK into attr::sched_flags" > Reviewed-by: Steven Rostedt <rostedt@xxxxxxxxxxx> > Signed-off-by: Daniel Bristot de Oliveira <bristot@xxxxxxxxxx> Thanks! -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html