mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
posix-cpu-timers: Correctly update timer status in posix_cpu_timer_del()
If posix_cpu_timer_del() exits early due to task not found or sighand invalid, it fails to clear the state of the timer. That's harmless but inconsistent. These early exits are accounted as successful delete. Move the update of the timer state into the success return path, so all "successful" deletions are handled. Reported-by: Frederic Weisbecker <frederic@kernel.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Frederic Weisbecker <frederic@kernel.org> Link: https://lore.kernel.org/all/20241105064212.974053438@linutronix.de
This commit is contained in:
parent
c163e40af9
commit
15cbfb92ef
@ -493,20 +493,20 @@ static int posix_cpu_timer_del(struct k_itimer *timer)
|
||||
*/
|
||||
WARN_ON_ONCE(ctmr->head || timerqueue_node_queued(&ctmr->node));
|
||||
} else {
|
||||
if (timer->it.cpu.firing) {
|
||||
if (timer->it.cpu.firing)
|
||||
ret = TIMER_RETRY;
|
||||
} else {
|
||||
else
|
||||
disarm_timer(timer, p);
|
||||
timer->it_status = POSIX_TIMER_DISARMED;
|
||||
}
|
||||
unlock_task_sighand(p, &flags);
|
||||
}
|
||||
|
||||
out:
|
||||
rcu_read_unlock();
|
||||
if (!ret)
|
||||
put_pid(ctmr->pid);
|
||||
|
||||
if (!ret) {
|
||||
put_pid(ctmr->pid);
|
||||
timer->it_status = POSIX_TIMER_DISARMED;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user