Commit 9be260a6 authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Linus Torvalds

prevent kprobes from catching spurious page faults

Prevent kprobes from catching spurious faults which will cause infinite
recursive page-fault and memory corruption by stack overflow.
Signed-off-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
Cc: <stable@kernel.org>		[2.6.28.x]
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 767b5828
...@@ -603,8 +603,6 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code) ...@@ -603,8 +603,6 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
si_code = SEGV_MAPERR; si_code = SEGV_MAPERR;
if (notify_page_fault(regs))
return;
if (unlikely(kmmio_fault(regs, address))) if (unlikely(kmmio_fault(regs, address)))
return; return;
...@@ -634,6 +632,9 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code) ...@@ -634,6 +632,9 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
if (spurious_fault(address, error_code)) if (spurious_fault(address, error_code))
return; return;
/* kprobes don't want to hook the spurious faults. */
if (notify_page_fault(regs))
return;
/* /*
* Don't take the mm semaphore here. If we fixup a prefetch * Don't take the mm semaphore here. If we fixup a prefetch
* fault we could otherwise deadlock. * fault we could otherwise deadlock.
...@@ -641,6 +642,9 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code) ...@@ -641,6 +642,9 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
goto bad_area_nosemaphore; goto bad_area_nosemaphore;
} }
/* kprobes don't want to hook the spurious faults. */
if (notify_page_fault(regs))
return;
/* /*
* It's safe to allow irq's after cr2 has been saved and the * It's safe to allow irq's after cr2 has been saved and the
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment