summaryrefslogtreecommitdiffstats
path: root/kernel/ksysfs.c
diff options
context:
space:
mode:
authorBen Segall <bsegall@google.com>2014-05-20 00:49:45 +0200
committerIngo Molnar <mingo@kernel.org>2014-06-05 11:52:00 +0200
commit51f2176d74ace4c3f58579a605ef5a9720befb00 (patch)
tree3c4f8405eacae93ef43707c2d335f8a12212eaeb /kernel/ksysfs.c
parentsched/numa: Decay ->wakee_flips instead of zeroing (diff)
downloadlinux-51f2176d74ace4c3f58579a605ef5a9720befb00.tar.xz
linux-51f2176d74ace4c3f58579a605ef5a9720befb00.zip
sched/fair: Fix unlocked reads of some cfs_b->quota/period
sched_cfs_period_timer() reads cfs_b->period without locks before calling do_sched_cfs_period_timer(), and similarly unthrottle_offline_cfs_rqs() would read cfs_b->period without the right lock. Thus a simultaneous change of bandwidth could cause corruption on any platform where ktime_t or u64 writes/reads are not atomic. Extend cfs_b->lock from do_sched_cfs_period_timer() to include the read of cfs_b->period to solve that issue; unthrottle_offline_cfs_rqs() can just use 1 rather than the exact quota, much like distribute_cfs_runtime() does. There is also an unlocked read of cfs_b->runtime_expires, but a race there would only delay runtime expiry by a tick. Still, the comparison should just be != anyway, which clarifies even that problem. Signed-off-by: Ben Segall <bsegall@google.com> Tested-by: Roman Gushchin <klamm@yandex-team.ru> [peterz: Fix compile warn] Signed-off-by: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20140519224945.20303.93530.stgit@sword-of-the-dawn.mtv.corp.google.com Cc: pjt@google.com Cc: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/ksysfs.c')
0 files changed, 0 insertions, 0 deletions