Oleg Nesterov
a69ac4a78d
[PATCH] posix-timers: fix posix_cpu_timer_set() vs run_posix_cpu_timers() race
...
This might be harmless, but looks like a race from code inspection (I
was unable to trigger it). I must admit, I don't understand why we
can't return TIMER_RETRY after 'spin_unlock(&p->sighand->siglock)'
without doing bump_cpu_timer(), but this is what original code does.
posix_cpu_timer_set:
read_lock(&tasklist_lock);
spin_lock(&p->sighand->siglock);
list_del_init(&timer->it.cpu.entry);
spin_unlock(&p->sighand->siglock);
We are probaly deleting the timer from run_posix_cpu_timers's 'firing'
local list_head while run_posix_cpu_timers() does list_for_each_safe.
Various bad things can happen, for example we can just delete this timer
so that list_for_each() will not notice it and run_posix_cpu_timers()
will not reset '->firing' flag. In that case,
....
if (timer->it.cpu.firing) {
read_unlock(&tasklist_lock);
timer->it.cpu.firing = -1;
return TIMER_RETRY;
}
sys_timer_settime() goes to 'retry:', calls posix_cpu_timer_set() again,
it returns TIMER_RETRY ...
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-10-24 08:13:14 -07:00
..
irq
[PATCH] CHECK_IRQ_PER_CPU() to avoid dead code in __do_IRQ()
2005-09-07 16:57:29 -07:00
power
[PATCH] x86_64: Set up safe page tables during resume
2005-10-10 08:36:46 -07:00
acct.c
[PATCH] kernel/acct: add kerneldoc
2005-09-10 10:06:26 -07:00
audit.c
[PATCH] gfp flags annotations - part 1
2005-10-08 15:00:57 -07:00
auditsc.c
[AUDIT] Allow filtering on system call success _or_ failure
2005-08-27 10:25:43 +01:00
capability.c
[PATCH] kernel/capability.c: add kerneldoc
2005-07-27 16:26:06 -07:00
compat.c
[PATCH] kernel: fix-up schedule_timeout() usage
2005-09-10 10:06:37 -07:00
configs.c
cpu.c
cpuset.c
[PATCH] gfp flags annotations - part 1
2005-10-08 15:00:57 -07:00
crash_dump.c
[PATCH] kernel/crash_dump.c: add kerneldoc
2005-07-27 16:26:06 -07:00
dma.c
exec_domain.c
exit.c
[PATCH] posix-timers: remove false BUG_ON() from run_posix_cpu_timers()
2005-10-24 08:12:35 -07:00
extable.c
fork.c
[PATCH] Threads shouldn't inherit PF_NOFREEZE
2005-10-19 23:04:31 -07:00
futex.c
[PATCH] futex: remove duplicate code
2005-09-07 16:57:33 -07:00
intermodule.c
[PATCH] introduce and use kzalloc
2005-09-07 16:57:45 -07:00
itimer.c
[PATCH] itimer fixes
2005-07-27 16:25:51 -07:00
kallsyms.c
Kconfig.hz
Kconfig.preempt
kexec.c
kfifo.c
[PATCH] gfp flags annotations - part 1
2005-10-08 15:00:57 -07:00
kmod.c
kprobes.c
[PATCH] kprobes: fix bug when probed on task and isr functions
2005-09-07 16:58:01 -07:00
ksysfs.c
kthread.c
Makefile
[PATCH] spinlock consolidation
2005-09-10 10:06:21 -07:00
module.c
[PATCH] use add_taint() for setting tainted bit flags
2005-09-13 08:22:29 -07:00
panic.c
[PATCH] Call emergency_reboot from panic
2005-07-26 14:35:43 -07:00
params.c
[PATCH] Ignore trailing whitespace on kernel parameters correctly
2005-09-28 07:46:41 -07:00
pid.c
posix-cpu-timers.c
[PATCH] posix-timers: fix posix_cpu_timer_set() vs run_posix_cpu_timers() race
2005-10-24 08:13:14 -07:00
posix-timers.c
[PATCH] Call exit_itimers from do_exit, not __exit_signal
2005-10-21 15:38:08 -07:00
printk.c
[PATCH] Add printk_clock()
2005-09-21 10:11:54 -07:00
profile.c
ptrace.c
[PATCH] remove duplicated code from proc and ptrace
2005-09-07 16:57:43 -07:00
rcupdate.c
[PATCH] rcu: keep rcu callback event counter
2005-10-17 15:27:58 -07:00
resource.c
[PATCH] introduce and use kzalloc
2005-09-07 16:57:45 -07:00
sched.c
[PATCH] Fix spinlock owner debugging
2005-09-13 09:59:04 -07:00
seccomp.c
signal.c
[PATCH] Call exit_itimers from do_exit, not __exit_signal
2005-10-21 15:38:08 -07:00
softirq.c
[PATCH] x86-64: Some cleanup and optimization to the processor data area.
2005-09-12 10:49:58 -07:00
softlockup.c
[PATCH] detect soft lockups
2005-09-07 16:57:17 -07:00
spinlock.c
[PATCH] spinlock consolidation
2005-09-10 10:06:21 -07:00
stop_machine.c
sys.c
[PATCH] reboot: comment and factor the main reboot functions
2005-09-22 22:17:33 -07:00
sys_ni.c
[PATCH] remove sys_set_zone_reclaim()
2005-08-01 10:03:56 -07:00
sysctl.c
[NET]: Fix sparse warnings
2005-08-29 16:01:32 -07:00
time.c
[PATCH] Add missing export of getnstimeofday()
2005-10-14 17:10:12 -07:00
timer.c
[PATCH] schedule_timeout_[un]interruptible() speedup
2005-09-13 08:22:29 -07:00
uid16.c
user.c
[PATCH] inotify
2005-07-12 20:38:38 -07:00
wait.c
workqueue.c
[PATCH] introduce and use kzalloc
2005-09-07 16:57:45 -07:00