This series adds UACCESS validation for PPC32. It includes half a dozen of changes to objtool core.
It is almost mature, performs code analysis for all PPC32, only missing marking of UACCESS enable/disable for book3s/32. Most object files are correctly decoded, only a few 'unreachable instruction' warnings remain due to more complex switch table cases: - Loading of table address after the dynamic jump - Nested switches It allowed to detect some UACCESS mess in a few files. They've been fixed through other patches. Changes in v3: - Rebased on top of a merge of powerpc tree and tip/objtool/core tree - Simplified support for relative switch tables based on relocation type - Taken comments from Peter Christophe Leroy (15): powerpc/kuap: Avoid unnecessary reads of MD_AP powerpc/kuap: Avoid useless jump_label on empty function powerpc/kuap: Refactor static branch for disabling kuap powerpc/kuap: Make disabling KUAP at boottime impossible except on book3s/64 powerpc/kuap: KUAP enabling/disabling functions must be __always_inline Revert "powerpc/bug: Provide better flexibility to WARN_ON/__WARN_FLAGS() with asm goto" objtool: Allow an architecture to disable objtool on ASM files objtool: Fix JUMP_ENTRY_SIZE for bi-arch like powerpc objtool: Add INSN_RETURN_CONDITIONAL objtool: Add support for relative switch tables objtool: Remove too strict constraint in jump table search objtool: Add support for more complex UACCESS control objtool: Prepare noreturns.h for more architectures powerpc/bug: Annotate reachable after warning trap powerpc: Implement UACCESS validation on PPC32 arch/Kconfig | 5 ++ arch/powerpc/Kconfig | 2 + arch/powerpc/include/asm/book3s/32/kup.h | 39 ++++----- arch/powerpc/include/asm/book3s/64/kup.h | 36 ++++---- arch/powerpc/include/asm/bug.h | 77 ++++------------- arch/powerpc/include/asm/kup.h | 66 ++++++++++----- arch/powerpc/include/asm/nohash/32/kup-8xx.h | 52 +++++------- arch/powerpc/include/asm/nohash/kup-booke.h | 49 +++++------ arch/powerpc/include/asm/uaccess.h | 6 +- arch/powerpc/kernel/misc_32.S | 2 +- arch/powerpc/kernel/traps.c | 9 +- arch/powerpc/kexec/core_32.c | 4 +- arch/powerpc/mm/book3s32/kuap.c | 18 ++-- arch/powerpc/mm/init-common.c | 3 + arch/powerpc/mm/nohash/kup.c | 11 +-- include/linux/objtool.h | 14 ++++ scripts/Makefile.build | 4 + tools/objtool/arch/powerpc/decode.c | 83 +++++++++++++++++-- .../arch/powerpc/include/arch/noreturns.h | 11 +++ .../arch/powerpc/include/arch/special.h | 2 +- tools/objtool/arch/powerpc/special.c | 34 +++++++- .../objtool/arch/x86/include/arch/noreturns.h | 20 +++++ tools/objtool/check.c | 59 ++++++++++--- tools/objtool/include/objtool/arch.h | 1 + tools/objtool/noreturns.h | 14 +--- tools/objtool/special.c | 55 ++++++------ 26 files changed, 399 insertions(+), 277 deletions(-) create mode 100644 tools/objtool/arch/powerpc/include/arch/noreturns.h create mode 100644 tools/objtool/arch/x86/include/arch/noreturns.h -- 2.40.1