LoongArch: Mark some assembler symbols as non-kprobe-able
Some assembler symbols are not kprobe safe, such as handle_syscall (used as syscall exception handler), *memset*/*memcpy*/*memmove* (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/ Tested-by: Jeff Xie <xiehuan09@gmail.com> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
This commit is contained in:
Родитель
09e679c28a
Коммит
fcf77d0162
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -29,6 +29,7 @@ SYM_FUNC_START(memmove)
|
|||
b rmemcpy
|
||||
4: b __rmemcpy_generic
|
||||
SYM_FUNC_END(memmove)
|
||||
_ASM_NOKPROBE(memmove)
|
||||
|
||||
EXPORT_SYMBOL(memmove)
|
||||
|
||||
|
@ -39,6 +40,7 @@ SYM_FUNC_START(rmemcpy)
|
|||
ALTERNATIVE "b __rmemcpy_generic", \
|
||||
"b __rmemcpy_fast", CPU_FEATURE_UAL
|
||||
SYM_FUNC_END(rmemcpy)
|
||||
_ASM_NOKPROBE(rmemcpy)
|
||||
|
||||
/*
|
||||
* void *__rmemcpy_generic(void *dst, const void *src, size_t n)
|
||||
|
@ -64,6 +66,7 @@ SYM_FUNC_START(__rmemcpy_generic)
|
|||
2: move a0, a3
|
||||
jr ra
|
||||
SYM_FUNC_END(__rmemcpy_generic)
|
||||
_ASM_NOKPROBE(__rmemcpy_generic)
|
||||
|
||||
/*
|
||||
* void *__rmemcpy_fast(void *dst, const void *src, size_t n)
|
||||
|
@ -119,3 +122,4 @@ SYM_FUNC_START(__rmemcpy_fast)
|
|||
3: move a0, a3
|
||||
jr ra
|
||||
SYM_FUNC_END(__rmemcpy_fast)
|
||||
_ASM_NOKPROBE(__rmemcpy_fast)
|
||||
|
|
|
@ -23,6 +23,7 @@ SYM_FUNC_START(memset)
|
|||
ALTERNATIVE "b __memset_generic", \
|
||||
"b __memset_fast", CPU_FEATURE_UAL
|
||||
SYM_FUNC_END(memset)
|
||||
_ASM_NOKPROBE(memset)
|
||||
|
||||
EXPORT_SYMBOL(memset)
|
||||
|
||||
|
@ -45,6 +46,7 @@ SYM_FUNC_START(__memset_generic)
|
|||
2: move a0, a3
|
||||
jr ra
|
||||
SYM_FUNC_END(__memset_generic)
|
||||
_ASM_NOKPROBE(__memset_generic)
|
||||
|
||||
/*
|
||||
* void *__memset_fast(void *s, int c, size_t n)
|
||||
|
@ -89,3 +91,4 @@ SYM_FUNC_START(__memset_fast)
|
|||
3: move a0, a3
|
||||
jr ra
|
||||
SYM_FUNC_END(__memset_fast)
|
||||
_ASM_NOKPROBE(__memset_fast)
|
||||
|
|
Загрузка…
Ссылка в новой задаче