Messages in this thread | | | Date | Wed, 9 Jun 2021 13:54:00 +0200 | From | Frederic Weisbecker <> | Subject | Re: [PATCH 1/6] posix-cpu-timers: Fix rearm racing against process tick |
| |
On Fri, Jun 04, 2021 at 01:31:54PM +0200, Frederic Weisbecker wrote: > Since the process wide cputime counter is started locklessly from > posix_cpu_timer_rearm(), it can be concurrently stopped by operations > on other timers from the same thread group, such as in the following > unlucky scenario: > > CPU 0 CPU 1 > ----- ----- > timer_settime(TIMER B) > posix_cpu_timer_rearm(TIMER A) > cpu_clock_sample_group() > (pct->timers_active already true) > > handle_posix_cpu_timers() > check_process_timers() > stop_process_timers() > pct->timers_active = false > arm_timer(TIMER A) > > tick -> run_posix_cpu_timers() > // sees !pct->timers_active, ignore > // our TIMER A > > Fix this with simply locking process wide cputime counting start and > timer arm in the same block. > > Signed-off-by: Frederic Weisbecker <frederic@kernel.org> > Cc: Oleg Nesterov <oleg@redhat.com> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Peter Zijlstra (Intel) <peterz@infradead.org> > Cc: Ingo Molnar <mingo@kernel.org> > Cc: Eric W. Biederman <ebiederm@xmission.com>
Fixes: 60f2ceaa8111 ("posix-cpu-timers: Remove unnecessary locking around cpu_clock_sample_group") Cc: stable@vger.kernel.org
| |