linux/arch/i386/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] Register disabled CPUs 2005-11-20 11:52:59 -08:00
cpu Merge x86-64 update from Andi 2005-11-14 19:56:02 -08:00
timers [PATCH] x86: fix cpu_khz with clock=pit 2005-11-13 18:14:13 -08:00
apic.c [PATCH] i386: LVT entries remaining unmasked on reboot 2005-11-07 07:53:28 -08:00
apm.c [PATCH] move pm_register/etc. to CONFIG_PM_LEGACY, pm_legacy.h 2005-11-13 18:14:10 -08:00
asm-offsets.c
bootflag.c
cpuid.c [PATCH] Driver Core: fix up all callers of class_device_create() 2005-10-28 09:52:52 -07:00
crash.c [PATCH] drop "[PATCH] i386 kexec-on-panic: Don't shutdown the apics" 2005-11-15 08:59:18 -08:00
dmi_scan.c
doublefault.c
early_printk.c
efi_stub.S
efi.c
entry.S [PATCH] i386: NMI pointer comparison fix 2005-11-13 18:14:13 -08:00
head.S
i386_ksyms.c
i387.c
i8237.c
i8259.c Revert "i386: move apic init in init_IRQs" 2005-10-31 19:16:17 -08:00
init_task.c
io_apic.c Revert "i386: move apic init in init_IRQs" 2005-10-31 19:16:17 -08:00
ioport.c [PATCH] reset tss->io_bitmap_owner in sys_ioperm() 2005-11-05 16:31:36 -08:00
irq.c [PATCH] x86: hot plug CPU to support physical add of new processors 2005-10-30 17:37:12 -08:00
kprobes.c [PATCH] Kprobes: preempt_disable/enable() simplification 2005-11-07 07:53:46 -08:00
ldt.c [PATCH] arch/i386/kernel/ldt.c should #include <asm/mmu_context.h> 2005-11-07 07:53:29 -08:00
machine_kexec.c
Makefile
mca.c [PATCH] arch/i386: Use ARRAY_SIZE macro 2005-11-07 07:53:28 -08:00
microcode.c
module.c
mpparse.c [PATCH] i386: Use bigsmp for > 8 core Opteron systems 2005-11-20 11:52:59 -08:00
msr.c [PATCH] Driver Core: fix up all callers of class_device_create() 2005-10-28 09:52:52 -07:00
nmi.c [PATCH] i386 nmi_watchdog: Merge check_nmi_watchdog fixes from x86_64 2005-10-30 17:37:13 -08:00
numaq.c
pci-dma.c
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
quirks.c
reboot_fixups.c [PATCH] arch/i386/kernel/reboot_fixups.c should #include <linux/reboot_fixups.h> 2005-11-07 07:53:29 -08:00
reboot.c
relocate_kernel.S
scx200.c [PATCH] arch/i386/kernel/scx200.c should #include <linux/scx200_gpio.h> 2005-11-07 07:53:29 -08:00
semaphore.c
setup.c [PATCH] i386: EXPORT_SYMBOL(screen_info) even #ifndef CONFIG_VT 2005-11-09 07:56:36 -08:00
sigframe.h
signal.c
smp.c
smpboot.c Merge x86-64 update from Andi 2005-11-14 19:56:02 -08:00
srat.c [PATCH] x86_64: Make i386 compile again with fourth DMA32 zone 2005-11-14 19:55:13 -08:00
summit.c
sys_i386.c
syscall_table.S
sysenter.c
time_hpet.c [PATCH] hpet-RTC: cache the comparator register 2005-10-30 17:37:30 -08:00
time.c Revert "i386: move apic init in init_IRQs" 2005-10-31 19:16:17 -08:00
trampoline.S
traps.c [PATCH] x86: initialise tss->io_bitmap_owner to something 2005-10-30 17:37:11 -08:00
vm86.c [PATCH] mm: i386 sh sh64 ready for split ptlock 2005-10-29 21:40:41 -07:00
vmlinux.lds.S
vsyscall-int80.S
vsyscall-note.S
vsyscall-sigreturn.S
vsyscall-sysenter.S
vsyscall.lds.S
vsyscall.S