12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #include <linux/mman.h>
- #include <linux/mm.h>
- #include <linux/kernel.h>
- #include <linux/ptrace.h>
- #include <asm/pgtable.h>
- void die(const char *str, struct pt_regs *fp, unsigned long err);
- asmlinkage int do_page_fault(struct pt_regs *regs, unsigned long address,
- unsigned long error_code)
- {
- #ifdef DEBUG
- pr_debug("regs->sr=%#x, regs->pc=%#lx, address=%#lx, %ld\n",
- regs->sr, regs->pc, address, error_code);
- #endif
- if ((unsigned long) address < PAGE_SIZE)
- pr_alert("Unable to handle kernel NULL pointer dereference");
- else
- pr_alert("Unable to handle kernel access");
- printk(" at virtual address %08lx\n", address);
- if (!user_mode(regs))
- die("Oops", regs, error_code);
- do_exit(SIGKILL);
- return 1;
- }
|