linux/arch/s390
Heiko Carstens 484a8ed8b7 s390/extable: add dedicated uaccess handler
This is more or less a combination of commit 2e77a62cb3 ("arm64:
extable: add a dedicated uaccess handler") and commit 4b5305decc
("x86/extable: Extend extable functionality").

To describe the problem that needs to solved let's cite the full arm64
commit message:

------
For inline assembly, we place exception fixups out-of-line in the
`.fixup` section such that these are out of the way of the fast path.
This has a few drawbacks:

* Since the fixup code is anonymous, backtraces will symbolize fixups
  as offsets from the nearest prior symbol, currently
  `__entry_tramp_text_end`. This is confusing, and painful to debug
  without access to the relevant vmlinux.

* Since the exception handler adjusts the PC to execute the fixup, and
  the fixup uses a direct branch back into the function it fixes,
  backtraces of fixups miss the original function. This is confusing,
  and violates requirements for RELIABLE_STACKTRACE (and therefore
  LIVEPATCH).

* Inline assembly and associated fixups are generated from templates,
  and we have many copies of logically identical fixups which only
  differ in which specific registers are written to and which address
  is branched to at the end of the fixup. This is potentially wasteful
  of I-cache resources, and makes it hard to add additional logic to
  fixups without significant bloat.

This patch address all three concerns for inline uaccess fixups by
adding a dedicated exception handler which updates registers in
exception context and subsequent returns back into the function which
faulted, removing the need for fixups specialized to each faulting
instruction.

Other than backtracing, there should be no functional change as a result
of this patch.
------

Acked-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
2022-03-08 00:33:00 +01:00
..
appldata s390/appldata: use struct_size() helper 2020-06-29 16:32:34 +02:00
boot s390: remove invalid email address of Heiko Carstens 2022-02-06 23:31:29 +01:00
configs s390: update defconfigs 2022-01-24 09:10:59 +01:00
crypto Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2022-01-11 10:21:35 -08:00
hypfs s390/extable: move EX_TABLE define to asm-extable.h 2022-03-08 00:33:00 +01:00
include s390/extable: add dedicated uaccess handler 2022-03-08 00:33:00 +01:00
kernel s390/extable: add and use fixup_exception helper function 2022-03-08 00:33:00 +01:00
kvm s390: remove invalid email address of Heiko Carstens 2022-02-06 23:31:29 +01:00
lib s390/extable: move EX_TABLE define to asm-extable.h 2022-03-08 00:33:00 +01:00
mm s390/extable: add dedicated uaccess handler 2022-03-08 00:33:00 +01:00
net s390/extable: convert to relative table with data 2022-03-08 00:33:00 +01:00
pci s390/extable: move EX_TABLE define to asm-extable.h 2022-03-08 00:33:00 +01:00
purgatory s390: enable KCSAN 2021-07-30 17:09:23 +02:00
tools s390/disassembler: update opcode table 2021-12-16 19:58:07 +01:00
Kbuild kbuild: use more subdir- for visiting subdirectories while cleaning 2021-10-24 13:49:46 +09:00
Kconfig s390: always use the packed stack layout 2022-03-01 21:05:09 +01:00
Kconfig.debug tracing: Refactor TRACE_IRQFLAGS_SUPPORT in Kconfig 2021-08-16 11:37:21 -04:00
Makefile s390: always use the packed stack layout 2022-03-01 21:05:09 +01:00