Messages in this thread | | | From | Huacai Chen <> | Date | Wed, 18 Jan 2023 12:14:03 +0800 | Subject | Re: [PATCH v12 4/5] LoongArch: Mark some assembler symbols as non-kprobe-able |
| |
If memcpy should be blacklisted, then what about memset and memmove?
Huacai
On Wed, Jan 18, 2023 at 10:01 AM Tiezhu Yang <yangtiezhu@loongson.cn> wrote: > > Some assembler symbols are not kprobe safe, such as handle_syscall > (used as syscall exception handler), *memcpy* (may cause recursive > exceptions), they can not be instrumented, just blacklist them for > kprobing. > > Here is a related problem and discussion: > Link: https://lore.kernel.org/lkml/20230114143859.7ccc45c1c5d9ce302113ab0a@kernel.org/ > > Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> > --- > arch/loongarch/include/asm/asm.h | 10 ++++++++++ > arch/loongarch/kernel/entry.S | 1 + > arch/loongarch/lib/memcpy.S | 3 +++ > 3 files changed, 14 insertions(+) > > diff --git a/arch/loongarch/include/asm/asm.h b/arch/loongarch/include/asm/asm.h > index 40eea6a..f591b32 100644 > --- a/arch/loongarch/include/asm/asm.h > +++ b/arch/loongarch/include/asm/asm.h > @@ -188,4 +188,14 @@ > #define PTRLOG 3 > #endif > > +/* Annotate a function as being unsuitable for kprobes. */ > +#ifdef CONFIG_KPROBES > +#define _ASM_NOKPROBE(name) \ > + .pushsection "_kprobe_blacklist", "aw"; \ > + .quad name; \ > + .popsection > +#else > +#define _ASM_NOKPROBE(name) > +#endif > + > #endif /* __ASM_ASM_H */ > diff --git a/arch/loongarch/kernel/entry.S b/arch/loongarch/kernel/entry.S > index d53b631..55e23b1 100644 > --- a/arch/loongarch/kernel/entry.S > +++ b/arch/loongarch/kernel/entry.S > @@ -67,6 +67,7 @@ SYM_FUNC_START(handle_syscall) > > RESTORE_ALL_AND_RET > SYM_FUNC_END(handle_syscall) > +_ASM_NOKPROBE(handle_syscall) > > SYM_CODE_START(ret_from_fork) > bl schedule_tail # a0 = struct task_struct *prev > diff --git a/arch/loongarch/lib/memcpy.S b/arch/loongarch/lib/memcpy.S > index 7c07d59..3b7e1de 100644 > --- a/arch/loongarch/lib/memcpy.S > +++ b/arch/loongarch/lib/memcpy.S > @@ -17,6 +17,7 @@ SYM_FUNC_START(memcpy) > ALTERNATIVE "b __memcpy_generic", \ > "b __memcpy_fast", CPU_FEATURE_UAL > SYM_FUNC_END(memcpy) > +_ASM_NOKPROBE(memcpy) > > EXPORT_SYMBOL(memcpy) > > @@ -41,6 +42,7 @@ SYM_FUNC_START(__memcpy_generic) > 2: move a0, a3 > jr ra > SYM_FUNC_END(__memcpy_generic) > +_ASM_NOKPROBE(__memcpy_generic) > > /* > * void *__memcpy_fast(void *dst, const void *src, size_t n) > @@ -93,3 +95,4 @@ SYM_FUNC_START(__memcpy_fast) > 3: move a0, a3 > jr ra > SYM_FUNC_END(__memcpy_fast) > +_ASM_NOKPROBE(__memcpy_fast) > -- > 2.1.0 >
| |