diff options
Diffstat (limited to 'arch/i386/kernel/process.c')
-rw-r--r-- | arch/i386/kernel/process.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c index be3efba7caf7..aea2ce1145df 100644 --- a/arch/i386/kernel/process.c +++ b/arch/i386/kernel/process.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/kallsyms.h> | 37 | #include <linux/kallsyms.h> |
38 | #include <linux/ptrace.h> | 38 | #include <linux/ptrace.h> |
39 | #include <linux/random.h> | 39 | #include <linux/random.h> |
40 | #include <linux/kprobes.h> | ||
40 | 41 | ||
41 | #include <asm/uaccess.h> | 42 | #include <asm/uaccess.h> |
42 | #include <asm/pgtable.h> | 43 | #include <asm/pgtable.h> |
@@ -339,6 +340,13 @@ void exit_thread(void) | |||
339 | struct task_struct *tsk = current; | 340 | struct task_struct *tsk = current; |
340 | struct thread_struct *t = &tsk->thread; | 341 | struct thread_struct *t = &tsk->thread; |
341 | 342 | ||
343 | /* | ||
344 | * Remove function-return probe instances associated with this task | ||
345 | * and put them back on the free list. Do not insert an exit probe for | ||
346 | * this function, it will be disabled by kprobe_flush_task if you do. | ||
347 | */ | ||
348 | kprobe_flush_task(tsk); | ||
349 | |||
342 | /* The process may have allocated an io port bitmap... nuke it. */ | 350 | /* The process may have allocated an io port bitmap... nuke it. */ |
343 | if (unlikely(NULL != t->io_bitmap_ptr)) { | 351 | if (unlikely(NULL != t->io_bitmap_ptr)) { |
344 | int cpu = get_cpu(); | 352 | int cpu = get_cpu(); |
@@ -362,6 +370,13 @@ void flush_thread(void) | |||
362 | { | 370 | { |
363 | struct task_struct *tsk = current; | 371 | struct task_struct *tsk = current; |
364 | 372 | ||
373 | /* | ||
374 | * Remove function-return probe instances associated with this task | ||
375 | * and put them back on the free list. Do not insert an exit probe for | ||
376 | * this function, it will be disabled by kprobe_flush_task if you do. | ||
377 | */ | ||
378 | kprobe_flush_task(tsk); | ||
379 | |||
365 | memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8); | 380 | memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8); |
366 | memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); | 381 | memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); |
367 | /* | 382 | /* |