[PATCH v2 00/11] static_call: Improve NULL/ret0 handling

From: Josh Poimboeuf
Date: Wed Mar 22 2023 - 00:00:29 EST


Peter pointed out that v1 had CFI violations on arm64 with
CONFIG_CFI_CLANG. Then I realized there are already CFI violations
today in the existing code.

So this ended up turning into a complete rewrite of v1.

Highlights include:

- Several cleanups
- Fix arm64 CFI violations
- Make NULL pointer behavior consistent across configs
- Merge NULL and RET0 into a single concept


v1 can be found here:

https://lkml.kernel.org/lkml/cover.1678474914.git.jpoimboe@xxxxxxxxxx

Josh Poimboeuf (11):
static_call: Improve key type abstraction
static_call: Flip key type union bit
static_call: Remove static_call_mod_init() declaration
static_call: Remove static_call.h dependency on cpu.h
static_call: Make ARCH_ADD_TRAMP_KEY() generic
static_call: "EXPORT_STATIC_CALL_TRAMP" -> "EXPORT_STATIC_CALL_RO"
static_call: Reorganize static call headers
arm64/static_call: Fix static call CFI violations
static_call: Make NULL static calls consistent
static_call: Remove static_call_cond()
static_call: Remove DEFINE_STATIC_CALL_RET0()

arch/Kconfig | 4 +
arch/arm/include/asm/paravirt.h | 2 +-
arch/arm64/include/asm/paravirt.h | 2 +-
arch/arm64/include/asm/static_call.h | 29 ++
arch/powerpc/include/asm/static_call.h | 1 -
arch/powerpc/kernel/irq.c | 2 +-
arch/powerpc/kernel/static_call.c | 6 +-
arch/x86/events/amd/brs.c | 2 +-
arch/x86/events/amd/core.c | 2 +-
arch/x86/events/core.c | 29 +-
arch/x86/include/asm/kvm-x86-ops.h | 6 +-
arch/x86/include/asm/kvm-x86-pmu-ops.h | 3 +-
arch/x86/include/asm/kvm_host.h | 4 +-
arch/x86/include/asm/paravirt.h | 2 +-
arch/x86/include/asm/perf_event.h | 2 +-
arch/x86/include/asm/preempt.h | 6 +-
arch/x86/include/asm/static_call.h | 22 +-
arch/x86/kernel/alternative.c | 6 -
arch/x86/kernel/paravirt.c | 1 +
arch/x86/kernel/static_call.c | 89 +-----
arch/x86/kvm/irq.c | 2 +-
arch/x86/kvm/lapic.c | 22 +-
arch/x86/kvm/pmu.c | 4 +-
arch/x86/kvm/x86.c | 28 +-
block/bio.c | 1 +
include/linux/entry-common.h | 2 +-
include/linux/entry-kvm.h | 2 +-
include/linux/kernel.h | 4 +-
include/linux/module.h | 2 +-
include/linux/sched.h | 2 +-
include/linux/static_call.h | 369 ++++++++++------------
include/linux/static_call_types.h | 74 +----
kernel/Makefile | 2 +-
kernel/cgroup/cgroup.c | 1 +
kernel/events/core.c | 15 +-
kernel/sched/core.c | 18 +-
kernel/static_call.c | 13 +
kernel/static_call_inline.c | 64 +++-
security/keys/trusted-keys/trusted_core.c | 2 +-
sound/soc/intel/avs/trace.c | 1 +
tools/include/linux/static_call_types.h | 74 +----
41 files changed, 369 insertions(+), 553 deletions(-)
create mode 100644 arch/arm64/include/asm/static_call.h

--
2.39.2