|
@@ -1028,42 +1028,13 @@ int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
|
|
|
if (fixup_exception(regs, trapnr))
|
|
|
return 1;
|
|
|
|
|
|
- /*
|
|
|
- * fixup routine could not handle it,
|
|
|
- * Let do_page_fault() fix it.
|
|
|
- */
|
|
|
+ /* fixup routine could not handle it. */
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
NOKPROBE_SYMBOL(kprobe_fault_handler);
|
|
|
|
|
|
-/*
|
|
|
- * Wrapper routine for handling exceptions.
|
|
|
- */
|
|
|
-int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
|
|
|
- void *data)
|
|
|
-{
|
|
|
- struct die_args *args = data;
|
|
|
- int ret = NOTIFY_DONE;
|
|
|
-
|
|
|
- if (args->regs && user_mode(args->regs))
|
|
|
- return ret;
|
|
|
-
|
|
|
- if (val == DIE_GPF) {
|
|
|
- /*
|
|
|
- * To be potentially processing a kprobe fault and to
|
|
|
- * trust the result from kprobe_running(), we have
|
|
|
- * be non-preemptible.
|
|
|
- */
|
|
|
- if (!preemptible() && kprobe_running() &&
|
|
|
- kprobe_fault_handler(args->regs, args->trapnr))
|
|
|
- ret = NOTIFY_STOP;
|
|
|
- }
|
|
|
- return ret;
|
|
|
-}
|
|
|
-NOKPROBE_SYMBOL(kprobe_exceptions_notify);
|
|
|
-
|
|
|
bool arch_within_kprobe_blacklist(unsigned long addr)
|
|
|
{
|
|
|
bool is_in_entry_trampoline_section = false;
|