linux/arch/x86_64/kernel
Jim Keniston 8bf1101bd5 [PATCH] kprobes: Fix return probes on sys_execve
Fix a bug in kprobes that can cause an Oops or even a crash when a return
probe is installed on one of the following functions: sys_execve,
do_execve, load_*_binary, flush_old_exec, or flush_thread.  The fix is to
remove the call to kprobe_flush_task() in flush_thread().  This fix has
been tested on all architectures for which the return-probes feature has
been implemented (i386, x86_64, ppc64, ia64).  Please apply.

BACKGROUND

Up to now, we have called kprobe_flush_task() under two situations: when a
task exits, and when it execs.  Flushing kretprobe_instances on exit is
correct because (a) do_exit() doesn't return, and (b) one or more
return-probed functions may be active when a task calls do_exit().  Neither
is the case for sys_execve() and its callees.

Initially, the mistaken call to kprobe_flush_task() on exec was harmless
because we put the "real" return address of each active probed function
back in the stack, just to be safe, when we recycled its
kretprobe_instance.  When support for ppc64 and ia64 was added, this safety
measure couldn't be employed, and was eventually dropped even for i386 and
x86_64.  sys_execve() and its callees were informally blacklisted for
return probes until this fix was developed.

Acked-by: Prasanna S Panchamukhi <prasanna@in.ibm.com>
Signed-off-by: Jim Keniston <jkenisto@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-11-23 16:08:39 -08:00
..
acpi [PATCH] x86-64: more gratitious linux/irq.h includes 2005-09-12 10:50:58 -07:00
cpufreq Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
Makefile [PATCH] x86_64: Support for AMD specific MCE Threshold. 2005-11-14 19:55:13 -08:00
aperture.c [PATCH] x86_64: Fix gcc 4 warning in aperture.c 2005-11-14 19:55:14 -08:00
apic.c [PATCH] x86_64: Support for AMD specific MCE Threshold. 2005-11-14 19:55:13 -08:00
asm-offsets.c [PATCH] x86-64: Some cleanup and optimization to the processor data area. 2005-09-12 10:49:58 -07:00
crash.c [PATCH] x86-64: more gratitious linux/irq.h includes 2005-09-12 10:50:58 -07:00
e820.c [PATCH] x86_64: Only use asm/sections.h to declare section symbols 2005-11-14 19:55:14 -08:00
early_printk.c [PATCH] x86-64: Add simnow console 2005-09-12 10:49:58 -07:00
entry.S [PATCH] x86_64: Support for AMD specific MCE Threshold. 2005-11-14 19:55:13 -08:00
genapic.c [PATCH] x86-64: Use physflat on Intel for < 8 CPUs with CPU hotplug 2005-09-12 10:50:56 -07:00
genapic_cluster.c [PATCH] x86-64: Remove obsolete APIC "write around" bug workaround 2005-09-12 10:49:55 -07:00
genapic_flat.c [PATCH] x86-64: Delivery mode should be APIC_DM_FIXED when using physical mode. 2005-09-12 10:50:56 -07:00
head.S [PATCH] x86_64: Unmap NULL during early bootup 2005-11-14 19:55:14 -08:00
head64.c [PATCH] x86_64: Only use asm/sections.h to declare section symbols 2005-11-14 19:55:14 -08:00
i387.c [PATCH] x86_64: Change init sections for CPU hotplug support 2005-06-25 16:24:30 -07:00
i8259.c Merge x86-64 update from Andi 2005-11-14 19:56:02 -08:00
init_task.c [PATCH] x86-64: Set the stack pointer correctly in init_thread and init_tss 2005-09-12 10:50:57 -07:00
io_apic.c [PATCH] i386/x86-64: Share interrupt vectors when there is a large number of interrupt sources 2005-11-14 19:55:13 -08:00
ioport.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
irq.c [PATCH] Remove unnecessary BUG_ON in irq.c 2005-09-12 10:50:55 -07:00
kprobes.c [PATCH] Kprobes: preempt_disable/enable() simplification 2005-11-07 07:53:46 -08:00
ldt.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
machine_kexec.c [PATCH] x86_64 machine_kexec: Use standard pagetable helpers 2005-07-29 13:12:49 -07:00
mce.c [PATCH] x86_64: Log machine checks from boot on Intel systems 2005-11-14 19:55:17 -08:00
mce_amd.c [PATCH] x86_64: Support for AMD specific MCE Threshold. 2005-11-14 19:55:13 -08:00
mce_intel.c [PATCH] x86_64: Change init sections for CPU hotplug support 2005-06-25 16:24:30 -07:00
module.c [PATCH] uml: kludgy compilation fixes for x86-64 subarch modules support 2005-05-05 16:36:33 -07:00
mpparse.c [PATCH] x86_64: Increase the maximum number of local APICs to the maximum 2005-11-14 19:55:17 -08:00
nmi.c [PATCH] x86_64: NMI watchdog frequency calculation adjustments 2005-09-13 08:22:33 -07:00
pci-dma.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pci-gart.c [PATCH] x86_64: Use the DMA32 zone for dma_alloc_coherent()/pci_alloc_consistent 2005-11-14 19:55:14 -08:00
pci-nommu.c [PATCH] gfp_t: dma-mapping (amd64) 2005-10-28 08:16:48 -07:00
pmtimer.c [PATCH] x86_64: Add pmtimer support 2005-05-17 07:59:15 -07:00
process.c [PATCH] kprobes: Fix return probes on sys_execve 2005-11-23 16:08:39 -08:00
ptrace.c [PATCH] consolidate sys_ptrace() 2005-11-07 07:53:42 -08:00
reboot.c [PATCH] x86_64: Reduce number of retries for reset through keyboard controller 2005-11-14 19:55:16 -08:00
relocate_kernel.S [PATCH] kexec: x86_64 kexec implementation 2005-06-25 16:24:50 -07:00
setup.c [PATCH] x86_64: Fix sparse mem 2005-11-14 19:55:18 -08:00
setup64.c [PATCH] x86_64: Unmap NULL during early bootup 2005-11-14 19:55:14 -08:00
signal.c [PATCH] x86_64: Save/restore CS in 64bit signal handlers and force __USER_CS for CS 2005-11-14 19:55:15 -08:00
smp.c [PATCH] x86_64: Don't enable interrupt unconditionally in reboot path 2005-11-14 19:55:16 -08:00
smpboot.c Merge x86-64 update from Andi 2005-11-14 19:56:02 -08:00
suspend.c [PATCH] swsusp: rework memory freeing on resume 2005-10-30 17:37:14 -08:00
suspend_asm.S [PATCH] x86_64: Set up safe page tables during resume 2005-10-10 08:36:46 -07:00
sys_x86_64.c [PATCH] x86_64: Use common sys_time64 2005-11-14 19:55:17 -08:00
syscall.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
time.c [PATCH] hpet-RTC: cache the comparator register 2005-10-30 17:37:30 -08:00
trampoline.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
traps.c [PATCH] x86_64: Remove CONFIG_CHECKING and add command line option for pagefault tracing 2005-11-14 19:55:17 -08:00
vmlinux.lds.S [PATCH] x86_64: Only use asm/sections.h to declare section symbols 2005-11-14 19:55:14 -08:00
vsyscall.c [PATCH] x86-64: Prevent gcc 4 from optimizing away vsyscalls 2005-09-12 10:50:56 -07:00
x8664_ksyms.c [PATCH] x86_64: Allow modular build of ia32 aout loader 2005-11-14 19:55:16 -08:00