remarkable-linux/kernel
Oleg Nesterov 20686a309a ptrace_stop: fix racy nonstop_code setting
If the tracer is gone and we are not going to stop, ptrace_stop() sets
->exit_code = nostop_code.  However, the tracer could actually clear the
exit code before detaching.  In that case get_signal_to_deliver() "resends"
the signal which was cancelled by the debugger.  For example, it is
possible that a quick PTRACE_ATTACH + PTRACE_DETACH can leave the tracee in
STOPPED state.

Change the behaviour of ptrace_stop().  If the caller is ptrace notify(),
we should always clear ->exit_code.  If the caller is
get_signal_to_deliver(), we should not touch it at all.  To do so, change
the nonstop_code parameter to "bool clear_code" and change the callers
accordingly.

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Acked-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-02-08 09:22:26 -08:00
..
irq genirq: stackdump after the "Trying to free already-free IRQ" message 2008-01-30 13:33:24 +01:00
power PM: documentation cleanups 2008-02-07 01:27:17 -05:00
time time: fix sysfs_show_{available,current}_clocksources() buffer overflow problem 2008-02-06 10:41:03 -08:00
.gitignore
acct.c
audit.c [AUDIT] ratelimit printk messages audit 2008-02-01 14:25:04 -05:00
audit.h
audit_tree.c
auditfilter.c [AUDIT] make audit=0 really stop audit messages 2008-02-01 14:24:33 -05:00
auditsc.c [AUDIT] create context if auditing was ever enabled 2008-02-01 14:24:45 -05:00
backtracetest.c x86: add a simple backtrace test module 2008-01-30 13:33:08 +01:00
capability.c Add 64-bit capability support to the kernel 2008-02-05 09:44:20 -08:00
cgroup.c Handle pid namespaces in cgroups code 2008-02-07 08:42:22 -08:00
cgroup_debug.c
compat.c
configs.c
cpu.c
cpuset.c proc: seqfile convert proc_pid_status to properly handle pid namespaces 2008-02-08 09:22:24 -08:00
delayacct.c
dma.c
exec_domain.c
exit.c do_wait: factor out "retval != 0" checks 2008-02-08 09:22:26 -08:00
extable.c
fork.c Memory controller: accounting setup 2008-02-07 08:42:18 -08:00
futex.c futex: Add bitset conditional wait/wakeup functionality 2008-02-01 17:45:14 +01:00
futex_compat.c futex: Add bitset conditional wait/wakeup functionality 2008-02-01 17:45:14 +01:00
hrtimer.c timerfd: new timerfd API 2008-02-05 09:44:07 -08:00
itimer.c
kallsyms.c remove support for un-needed _extratext section 2008-02-06 10:41:01 -08:00
Kconfig.hz
Kconfig.preempt
kexec.c vmcoreinfo: add "VMCOREINFO_" to all the call for vmcoreinfo_append_str() 2008-02-07 08:42:25 -08:00
kfifo.c
kmod.c
kprobes.c kprobes: kretprobe user entry-handler 2008-02-06 10:41:11 -08:00
ksysfs.c
kthread.c
latencytop.c
lockdep.c
lockdep_internals.h
lockdep_proc.c
Makefile namespaces: cleanup the code managed with PID_NS option 2008-02-08 09:22:23 -08:00
marker.c
module.c fix "modules: make module_address_lookup() safe" 2008-02-08 09:22:24 -08:00
mutex-debug.c
mutex-debug.h
mutex.c
mutex.h
notifier.c kernel/notifier.c should #include <linux/reboot.h> 2008-02-06 10:41:02 -08:00
ns_cgroup.c
nsproxy.c namespaces: move the IPC namespace under IPC_NS option 2008-02-08 09:22:23 -08:00
panic.c ACPI: Taint kernel on ACPI table override (format corrected) 2008-02-06 22:07:51 -05:00
params.c kernel/params.c: remove sparse-warning (different signedness) 2008-02-06 10:41:08 -08:00
pid.c namespaces: cleanup the code managed with PID_NS option 2008-02-08 09:22:23 -08:00
pid_namespace.c namespaces: cleanup the code managed with PID_NS option 2008-02-08 09:22:23 -08:00
pm_qos_params.c pm qos infrastructure and interface 2008-02-05 09:44:22 -08:00
posix-cpu-timers.c
posix-timers.c timerfd: new timerfd API 2008-02-05 09:44:07 -08:00
printk.c printk.c: use unsigned ints instead of longs for logbuf index 2008-02-06 10:41:04 -08:00
profile.c
ptrace.c ptrace_check_attach: remove unneeded ->signal != NULL check 2008-02-08 09:22:26 -08:00
rcuclassic.c
rcupdate.c
rcupreempt.c
rcupreempt_trace.c
rcutorture.c
relay.c relay: nopage 2008-02-06 10:41:07 -08:00
res_counter.c Memory controller improve user interface 2008-02-07 08:42:18 -08:00
resource.c
rtmutex-debug.c
rtmutex-debug.h
rtmutex-tester.c
rtmutex.c
rtmutex.h
rtmutex_common.h
rwsem.c
sched.c Merge branch 'task_killable' of git://git.kernel.org/pub/scm/linux/kernel/git/willy/misc 2008-02-01 11:45:47 +11:00
sched_debug.c
sched_fair.c sched: let +nice tasks have smaller impact 2008-01-31 22:45:22 +01:00
sched_idletask.c
sched_rt.c
sched_stats.h
seccomp.c
signal.c ptrace_stop: fix racy nonstop_code setting 2008-02-08 09:22:26 -08:00
softirq.c time: track accurate idle time with tick_sched.idle_sleeptime 2008-01-30 13:30:04 +01:00
softlockup.c debug: softlockup looping fix 2008-02-02 14:27:45 +11:00
spinlock.c spinlock: lockbreak cleanup 2008-01-30 13:31:20 +01:00
srcu.c make srcu_readers_active() static 2008-02-06 10:41:02 -08:00
stacktrace.c
stop_machine.c stopmachine: semaphore to mutex 2008-02-06 10:41:08 -08:00
sys.c kernel/sys.c: get rid of expensive divides in groups_sort() 2008-02-06 10:41:09 -08:00
sys_ni.c timerfd: new timerfd API 2008-02-05 09:44:07 -08:00
sysctl.c hugetlb: add locking for overcommit sysctl 2008-02-08 09:22:23 -08:00
sysctl_check.c capabilities: introduce per-process capability bounding set 2008-02-05 09:44:20 -08:00
taskstats.c
test_kprobes.c kprobes: kretprobe user entry-handler 2008-02-06 10:41:11 -08:00
time.c speed up jiffies conversion functions if HZ==USER_HZ 2008-02-06 10:41:10 -08:00
timer.c taskstats scaled time cleanup 2008-02-06 10:41:00 -08:00
tsacct.c
uid16.c
user.c namespaces: cleanup the code managed with the USER_NS option 2008-02-08 09:22:23 -08:00
user_namespace.c namespaces: cleanup the code managed with the USER_NS option 2008-02-08 09:22:23 -08:00
utsname.c
utsname_sysctl.c
wait.c
workqueue.c