Messages in this thread | | | Date | Fri, 6 Feb 2009 00:57:27 +0100 | From | Ingo Molnar <> | Subject | Re: [BUGFIX][PATCH -rc/-mm] prevent kprobes from catching spurious page faults |
| |
* Masami Hiramatsu <mhiramat@redhat.com> wrote:
> - if (notify_page_fault(regs)) > - return; > if (unlikely(kmmio_fault(regs, address))) > return; > > @@ -634,6 +632,9 @@ void __kprobes do_page_fault(struct pt_r > if (spurious_fault(address, error_code)) > 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 > * fault we could otherwise deadlock. > @@ -641,6 +642,9 @@ void __kprobes do_page_fault(struct pt_r > goto bad_area_nosemaphore; > } > > + /* kprobes don't want to hook the spurious faults. */ > + if (notify_page_fault(regs)) > + return;
I dont know - this spreads that callback to two places now. Any reason why kprobes cannot call spurious_fault(), if there's a probe active?
Also, moving that would remove the planned cleanup of merging these two into one call:
if (notify_page_fault(regs)) return; if (unlikely(kmmio_fault(regs, address))) return;
We should reduce the probing cross section, not increase it, especially in such a critical codepath as the pagefault handler.
Btw., why cannot kprobes install a dynamic probe to the fault handler itself? That way the default path would have no such callbacks and checks at all.
Ingo
| |