x86/retbleed: Add fine grained Kconfig knobs
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>
This commit is contained in:
committed by
Borislav Petkov
parent
26aae8ccbc
commit
f43b9876e8
@ -68,6 +68,7 @@ const struct option check_options[] = {
|
||||
OPT_BOOLEAN('n', "noinstr", &opts.noinstr, "validate noinstr rules"),
|
||||
OPT_BOOLEAN('o', "orc", &opts.orc, "generate ORC metadata"),
|
||||
OPT_BOOLEAN('r', "retpoline", &opts.retpoline, "validate and annotate retpoline usage"),
|
||||
OPT_BOOLEAN(0, "rethunk", &opts.rethunk, "validate and annotate rethunk usage"),
|
||||
OPT_BOOLEAN(0, "unret", &opts.unret, "validate entry unret placement"),
|
||||
OPT_BOOLEAN('l', "sls", &opts.sls, "validate straight-line-speculation mitigations"),
|
||||
OPT_BOOLEAN('s', "stackval", &opts.stackval, "validate frame pointer rules"),
|
||||
@ -124,6 +125,7 @@ static bool opts_valid(void)
|
||||
opts.noinstr ||
|
||||
opts.orc ||
|
||||
opts.retpoline ||
|
||||
opts.rethunk ||
|
||||
opts.sls ||
|
||||
opts.stackval ||
|
||||
opts.static_call ||
|
||||
@ -136,6 +138,11 @@ static bool opts_valid(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (opts.unret && !opts.rethunk) {
|
||||
ERROR("--unret requires --rethunk");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (opts.dump_orc)
|
||||
return true;
|
||||
|
||||
|
@ -3732,8 +3732,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 (opts.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,
|
||||
@ -4264,7 +4267,9 @@ int check(struct objtool_file *file)
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
warnings += ret;
|
||||
}
|
||||
|
||||
if (opts.rethunk) {
|
||||
ret = create_return_sites_sections(file);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
@ -19,6 +19,7 @@ struct opts {
|
||||
bool noinstr;
|
||||
bool orc;
|
||||
bool retpoline;
|
||||
bool rethunk;
|
||||
bool unret;
|
||||
bool sls;
|
||||
bool stackval;
|
||||
|
Reference in New Issue
Block a user