diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h index ecd307959098..12439b71d2ed 100644 --- a/include/linux/compiler-clang.h +++ b/include/linux/compiler-clang.h @@ -67,3 +67,4 @@ #endif #define __nocfi __attribute__((__no_sanitize__("cfi"))) +#define __cficanonical __attribute__((__cfi_canonical_jump_table__)) diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h index c940021764bd..c9b574165381 100644 --- a/include/linux/compiler_types.h +++ b/include/linux/compiler_types.h @@ -241,6 +241,10 @@ struct ftrace_likely_data { # define __nocfi #endif +#ifndef __cficanonical +# define __cficanonical +#endif + #ifndef asm_volatile_goto #define asm_volatile_goto(x...) asm goto(x) #endif diff --git a/include/linux/init.h b/include/linux/init.h index 6ac59cab9c0d..e83a6cfc33ee 100644 --- a/include/linux/init.h +++ b/include/linux/init.h @@ -220,8 +220,8 @@ extern bool initcall_debug; __initcall_name(initstub, __iid, id) #define __define_initcall_stub(__stub, fn) \ - int __init __stub(void); \ - int __init __stub(void) \ + int __init __cficanonical __stub(void); \ + int __init __cficanonical __stub(void) \ { \ return fn(); \ } \ diff --git a/include/linux/pci.h b/include/linux/pci.h index 5b8505a5ca5f..081bbc1eb00a 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1914,8 +1914,8 @@ enum pci_fixup_pass { #ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS #define ___DECLARE_PCI_FIXUP_SECTION(sec, name, vendor, device, class, \ class_shift, hook, stub) \ - void stub(struct pci_dev *dev); \ - void stub(struct pci_dev *dev) \ + void __cficanonical stub(struct pci_dev *dev); \ + void __cficanonical stub(struct pci_dev *dev) \ { \ hook(dev); \ } \