Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 785d3cd2 authored by Nicolas Pitre's avatar Nicolas Pitre Committed by Russell King
Browse files

ARM kprobes: prevent some functions involved with kprobes from being probed



Signed-off-by: default avatarNicolas Pitre <nico@marvell.com>
parent d30a0c8b
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -58,6 +58,12 @@

	.endm

#ifdef CONFIG_KPROBES
	.section	.kprobes.text,"ax",%progbits
#else
	.text
#endif

/*
 * Invalid mode handlers
 */
@@ -562,7 +568,7 @@ do_fpe:
	.data
ENTRY(fp_enter)
	.word	no_fp
	.text
	.previous

no_fp:	mov	pc, lr

+1 −1
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)
	unsigned long addr = (unsigned long)p->addr;
	int is;

	if (addr & 0x3)
	if (addr & 0x3 || in_exception_text(addr))
		return -EINVAL;

	insn = *p->addr;
+0 −9
Original line number Diff line number Diff line
@@ -46,15 +46,6 @@ __setup("user_debug=", user_debug_setup);

static void dump_mem(const char *str, unsigned long bottom, unsigned long top);

static inline int in_exception_text(unsigned long ptr)
{
	extern char __exception_text_start[];
	extern char __exception_text_end[];

	return ptr >= (unsigned long)&__exception_text_start &&
	       ptr < (unsigned long)&__exception_text_end;
}

void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame)
{
#ifdef CONFIG_KALLSYMS
+1 −0
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ SECTIONS
			TEXT_TEXT
			SCHED_TEXT
			LOCK_TEXT
			KPROBES_TEXT
#ifdef CONFIG_MMU
			*(.fixup)
#endif
+2 −2
Original line number Diff line number Diff line
@@ -239,7 +239,7 @@ __do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
	return fault;
}

static int
static int __kprobes
do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
{
	struct task_struct *tsk;
@@ -338,7 +338,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 * interrupt or a critical region, and should only copy the information
 * from the master page table, nothing more.
 */
static int
static int __kprobes
do_translation_fault(unsigned long addr, unsigned int fsr,
		     struct pt_regs *regs)
{
Loading