-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
error-injection: Separate error-injection from kprobe
Since error-injection framework is not limited to be used by kprobes, nor bpf. Other kernel subsystems can use it freely for checking safeness of error-injection, e.g. livepatch, ftrace etc. So this separate error-injection framework from kprobes. Some differences has been made: - "kprobe" word is removed from any APIs/structures. - BPF_ALLOW_ERROR_INJECTION() is renamed to ALLOW_ERROR_INJECTION() since it is not limited for BPF too. - CONFIG_FUNCTION_ERROR_INJECTION is the config item of this feature. It is automatically enabled if the arch supports error injection feature for kprobe or ftrace etc. Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Reviewed-by: Josef Bacik <jbacik@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
- Loading branch information
Masami Hiramatsu
authored and
Alexei Starovoitov
committed
Jan 13, 2018
1 parent
66665ad
commit 540adea
Showing
22 changed files
with
317 additions
and
213 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
#ifndef _ASM_ERROR_INJECTION_H | ||
#define _ASM_ERROR_INJECTION_H | ||
|
||
#include <linux/compiler.h> | ||
#include <linux/linkage.h> | ||
#include <asm/ptrace.h> | ||
#include <asm-generic/error-injection.h> | ||
|
||
asmlinkage void just_return_func(void); | ||
void override_function_with_return(struct pt_regs *regs); | ||
|
||
#endif /* _ASM_ERROR_INJECTION_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
|
||
#include <linux/error-injection.h> | ||
#include <linux/kprobes.h> | ||
|
||
asmlinkage void just_return_func(void); | ||
|
||
asm( | ||
".type just_return_func, @function\n" | ||
"just_return_func:\n" | ||
" ret\n" | ||
".size just_return_func, .-just_return_func\n" | ||
); | ||
|
||
void override_function_with_return(struct pt_regs *regs) | ||
{ | ||
regs->ip = (unsigned long)&just_return_func; | ||
} | ||
NOKPROBE_SYMBOL(override_function_with_return); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
#ifndef _ASM_GENERIC_ERROR_INJECTION_H | ||
#define _ASM_GENERIC_ERROR_INJECTION_H | ||
|
||
#if defined(__KERNEL__) && !defined(__ASSEMBLY__) | ||
#ifdef CONFIG_FUNCTION_ERROR_INJECTION | ||
/* | ||
* Whitelist ganerating macro. Specify functions which can be | ||
* error-injectable using this macro. | ||
*/ | ||
#define ALLOW_ERROR_INJECTION(fname) \ | ||
static unsigned long __used \ | ||
__attribute__((__section__("_error_injection_whitelist"))) \ | ||
_eil_addr_##fname = (unsigned long)fname; | ||
#else | ||
#define ALLOW_ERROR_INJECTION(fname) | ||
#endif | ||
#endif | ||
|
||
#endif /* _ASM_GENERIC_ERROR_INJECTION_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
#ifndef _LINUX_ERROR_INJECTION_H | ||
#define _LINUX_ERROR_INJECTION_H | ||
|
||
#ifdef CONFIG_FUNCTION_ERROR_INJECTION | ||
|
||
#include <asm/error-injection.h> | ||
|
||
extern bool within_error_injection_list(unsigned long addr); | ||
|
||
#else /* !CONFIG_FUNCTION_ERROR_INJECTION */ | ||
|
||
#include <asm-generic/error-injection.h> | ||
static inline bool within_error_injection_list(unsigned long addr) | ||
{ | ||
return false; | ||
} | ||
|
||
#endif | ||
|
||
#endif /* _LINUX_ERROR_INJECTION_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.