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

Message ID cover.1679456900.git.jpoimboe@kernel.org
Headers
Series static_call: Improve NULL/ret0 handling |

Message

Josh Poimboeuf March 22, 2023, 4 a.m. UTC
  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@kernel.org

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