On Fri, Nov 13, 2020 at 10:26:54AM -0800, Sami Tolvanen wrote: > e820__mapped_all is passed as a callback to is_mmconf_reserved, which > expects a function of type: > > typedef bool (*check_reserved_t)(u64 start, u64 end, unsigned type); > > This trips indirect call checking with Clang's Control-Flow Integrity > (CFI). Change the last argument from enum e820_type to unsigned to fix > the type mismatch. > > Reported-by: Sedat Dilek <sedat.di...@gmail.com> > Signed-off-by: Sami Tolvanen <samitolva...@google.com> > --- > arch/x86/include/asm/e820/api.h | 2 +- > arch/x86/kernel/e820.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/include/asm/e820/api.h b/arch/x86/include/asm/e820/api.h > index e8f58ddd06d9..e872a796619d 100644 > --- a/arch/x86/include/asm/e820/api.h > +++ b/arch/x86/include/asm/e820/api.h > @@ -12,7 +12,7 @@ extern unsigned long pci_mem_start; > > extern bool e820__mapped_raw_any(u64 start, u64 end, enum e820_type type); > extern bool e820__mapped_any(u64 start, u64 end, enum e820_type type); > -extern bool e820__mapped_all(u64 start, u64 end, enum e820_type type); > +extern bool e820__mapped_all(u64 start, u64 end, unsigned type);
I think the proper fix is to fix the typedef to: typedef bool (*check_reserved_t)(u64 start, u64 end, enum e820_type type); because * is_mmconf_reserved() is passing in E820_TYPE_RESERVED which is enum e820_type * is_acpi_reserved() is the other check_reserved_t function ptr and the last arg type there is unused so it can just as well be enum e820_type. Thx. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette