x86/ibt, objtool: Add IBT_NOSEAL()
Add a macro which prevents a function from getting sealed if there are no compile-time references to it. Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> Message-Id: <20220818213927.e44fmxkoq4yj6ybn@treble> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
20ec3ebd70
commit
e27e5bea95
@ -31,6 +31,16 @@
|
||||
|
||||
#define __noendbr __attribute__((nocf_check))
|
||||
|
||||
/*
|
||||
* Create a dummy function pointer reference to prevent objtool from marking
|
||||
* the function as needing to be "sealed" (i.e. ENDBR converted to NOP by
|
||||
* apply_ibt_endbr()).
|
||||
*/
|
||||
#define IBT_NOSEAL(fname) \
|
||||
".pushsection .discard.ibt_endbr_noseal\n\t" \
|
||||
_ASM_PTR fname "\n\t" \
|
||||
".popsection\n\t"
|
||||
|
||||
static inline __attribute_const__ u32 gen_endbr(void)
|
||||
{
|
||||
u32 endbr;
|
||||
@ -84,6 +94,7 @@ extern __noendbr void ibt_restore(u64 save);
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#define ASM_ENDBR
|
||||
#define IBT_NOSEAL(name)
|
||||
|
||||
#define __noendbr
|
||||
|
||||
|
@ -4096,7 +4096,8 @@ static int validate_ibt(struct objtool_file *file)
|
||||
* These sections can reference text addresses, but not with
|
||||
* the intent to indirect branch to them.
|
||||
*/
|
||||
if (!strncmp(sec->name, ".discard", 8) ||
|
||||
if ((!strncmp(sec->name, ".discard", 8) &&
|
||||
strcmp(sec->name, ".discard.ibt_endbr_noseal")) ||
|
||||
!strncmp(sec->name, ".debug", 6) ||
|
||||
!strcmp(sec->name, ".altinstructions") ||
|
||||
!strcmp(sec->name, ".ibt_endbr_seal") ||
|
||||
|
Loading…
Reference in New Issue
Block a user