Message ID | 20210930180531.1190642-12-samitolvanen@google.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | x86: Add support for Clang CFI | expand |
On Thu, Sep 30, 2021 at 11:05:27AM -0700, Sami Tolvanen wrote: > From: Kees Cook <keescook@chromium.org> > > The __typeid__* symbols aren't actually relocations, so they can be > ignored during relocation generation. Then what are they? It would be good to add that information here.
On Tue, Oct 5, 2021 at 8:31 PM Josh Poimboeuf <jpoimboe@redhat.com> wrote: > > On Thu, Sep 30, 2021 at 11:05:27AM -0700, Sami Tolvanen wrote: > > From: Kees Cook <keescook@chromium.org> > > > > The __typeid__* symbols aren't actually relocations, so they can be > > ignored during relocation generation. > > Then what are they? It would be good to add that information here. These relocations are for compiler-generated constants that it uses for indirect call type checking. I think we can clarify this in the next version. Sami
diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c index 27c82207d387..5304a6037924 100644 --- a/arch/x86/tools/relocs.c +++ b/arch/x86/tools/relocs.c @@ -51,6 +51,7 @@ static const char * const sym_regex_kernel[S_NSYMTYPES] = { "^(xen_irq_disable_direct_reloc$|" "xen_save_fl_direct_reloc$|" "VDSO|" + "__typeid__|" "__crc_)", /* @@ -811,6 +812,12 @@ static int do_reloc64(struct section *sec, Elf_Rel *rel, ElfW(Sym) *sym, symname); break; + case R_X86_64_8: + if (!shn_abs || !is_reloc(S_ABS, symname)) + die("Non-whitelisted %s relocation: %s\n", + rel_type(r_type), symname); + break; + case R_X86_64_32: case R_X86_64_32S: case R_X86_64_64: