[PATCH 1/2] powerpc: kprobes: blacklist exception handlers
Michael Ellerman
mpe at ellerman.id.au
Thu Apr 20 16:33:42 AEST 2017
"Naveen N. Rao" <naveen.n.rao at linux.vnet.ibm.com> writes:
> diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
> index 71286dfd76a0..59159337a097 100644
> --- a/arch/powerpc/kernel/kprobes.c
> +++ b/arch/powerpc/kernel/kprobes.c
> @@ -112,6 +113,14 @@ kprobe_opcode_t *kprobe_lookup_name(const char *name, unsigned int offset)
> return addr;
> }
>
> +bool arch_within_kprobe_blacklist(unsigned long addr)
> +{
> + return (addr >= (unsigned long)__kprobes_text_start &&
> + addr < (unsigned long)__kprobes_text_end) ||
> + (addr >= (unsigned long)_stext &&
> + addr < (unsigned long)__head_end);
> +}
This isn't quite right when the kernel is relocated.
_stext and __head_end will be updated to point to the relocated copy of
the kernel, eg:
# grep -e _stext /proc/kallsyms
c000000002000000 T _stext
So you probably also want something like:
if (_stext != PAGE_OFFSET &&
addr >= PAGE_OFFSET &&
addr < (PAGE_OFFSET + (__head_end - _stext)))
return true;
But that's entirely untested :)
You can test the relocatable case by enabling CONFIG_RELOCATABLE_TEST.
cheers
More information about the Linuxppc-dev
mailing list