x86/retbleed: Add fine grained Kconfig knobs
commit f43b9876e857c739d407bc56df288b0ebe1a9164 upstream. Do fine-grained Kconfig for all the various retbleed parts. NOTE: if your compiler doesn't support return thunks this will silently 'upgrade' your mitigation to IBPB, you might not like this. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Borislav Petkov <bp@suse.de> [cascardo: there is no CONFIG_OBJTOOL] [cascardo: objtool calling and option parsing has changed] Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
12a1357005
commit
cc3011cdbe
@@ -20,7 +20,7 @@
|
||||
#include <objtool/objtool.h>
|
||||
|
||||
bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats,
|
||||
validate_dup, vmlinux, mcount, noinstr, backup, sls, unret;
|
||||
validate_dup, vmlinux, mcount, noinstr, backup, sls, unret, rethunk;
|
||||
|
||||
static const char * const check_usage[] = {
|
||||
"objtool check [<options>] file.o",
|
||||
@@ -36,6 +36,7 @@ const struct option check_options[] = {
|
||||
OPT_BOOLEAN('f', "no-fp", &no_fp, "Skip frame pointer validation"),
|
||||
OPT_BOOLEAN('u', "no-unreachable", &no_unreachable, "Skip 'unreachable instruction' warnings"),
|
||||
OPT_BOOLEAN('r', "retpoline", &retpoline, "Validate retpoline assumptions"),
|
||||
OPT_BOOLEAN(0, "rethunk", &rethunk, "validate and annotate rethunk usage"),
|
||||
OPT_BOOLEAN(0, "unret", &unret, "validate entry unret placement"),
|
||||
OPT_BOOLEAN('m', "module", &module, "Indicates the object will be part of a kernel module"),
|
||||
OPT_BOOLEAN('b', "backtrace", &backtrace, "unwind on error"),
|
||||
|
||||
@@ -3440,8 +3440,11 @@ static int validate_retpoline(struct objtool_file *file)
|
||||
continue;
|
||||
|
||||
if (insn->type == INSN_RETURN) {
|
||||
WARN_FUNC("'naked' return found in RETPOLINE build",
|
||||
insn->sec, insn->offset);
|
||||
if (rethunk) {
|
||||
WARN_FUNC("'naked' return found in RETHUNK build",
|
||||
insn->sec, insn->offset);
|
||||
} else
|
||||
continue;
|
||||
} else {
|
||||
WARN_FUNC("indirect %s found in RETPOLINE build",
|
||||
insn->sec, insn->offset,
|
||||
@@ -3711,7 +3714,9 @@ int check(struct objtool_file *file)
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
warnings += ret;
|
||||
}
|
||||
|
||||
if (rethunk) {
|
||||
ret = create_return_sites_sections(file);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
extern const struct option check_options[];
|
||||
extern bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats,
|
||||
validate_dup, vmlinux, mcount, noinstr, backup, sls, unret;
|
||||
validate_dup, vmlinux, mcount, noinstr, backup, sls, unret, rethunk;
|
||||
|
||||
extern int cmd_parse_options(int argc, const char **argv, const char * const usage[]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user