OpenCloudOS-Kernel/arch/arm64
Ard Biesheuvel 3fc24ef32d arm64: compat: Implement misalignment fixups for multiword loads
The 32-bit ARM kernel implements fixups on behalf of user space when
using LDM/STM or LDRD/STRD instructions on addresses that are not 32-bit
aligned. This is not something that is supported by the architecture,
but was done anyway to increase compatibility with user space software,
which mostly targeted x86 at the time and did not care about aligned
accesses.

This feature is one of the remaining impediments to being able to switch
to 64-bit kernels on 64-bit capable hardware running 32-bit user space,
so let's implement it for the arm64 compat layer as well.

Note that the intent is to implement the exact same handling of
misaligned multi-word loads and stores as the 32-bit kernel does,
including what appears to be missing support for user space programs
that rely on SETEND to switch to a different byte order and back. Also,
like the 32-bit ARM version, we rely on the faulting address reported by
the CPU to infer the memory address, instead of decoding the instruction
fully to obtain this information.

This implementation is taken from the 32-bit ARM tree, with all pieces
removed that deal with instructions other than LDRD/STRD and LDM/STM, or
that deal with alignment exceptions taken in kernel mode.

Cc: debian-arm@lists.debian.org
Cc: Vagrant Cascadian <vagrant@debian.org>
Cc: Riku Voipio <riku.voipio@iki.fi>
Cc: Steve McIntyre <steve@einval.com>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20220701135322.3025321-1-ardb@kernel.org
[catalin.marinas@arm.com: change the option to 'default n']
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2022-09-06 09:34:53 +01:00
..
boot ARM: SoC: late updates for 6.0 2022-08-05 10:02:33 -07:00
configs ARM: new SoC support for 6.0 2022-08-02 08:29:18 -07:00
crypto crypto: arm64/poly1305 - fix a read out-of-bound 2022-07-29 18:29:17 +08:00
hyperv arm64: hyperv: Initialize hypervisor on boot 2021-08-04 16:54:36 +00:00
include arm64: compat: Implement misalignment fixups for multiword loads 2022-09-06 09:34:53 +01:00
kernel arm64: compat: Implement misalignment fixups for multiword loads 2022-09-06 09:34:53 +01:00
kvm KVM/arm64 fixes for 6.0, take #1 2022-08-19 05:43:53 -04:00
lib Networking changes for 6.0. 2022-08-03 16:29:08 -07:00
mm arm64: compat: Implement misalignment fixups for multiword loads 2022-09-06 09:34:53 +01:00
net bpf, arm64: Fix bpf trampoline instruction endianness 2022-08-10 16:50:57 +02:00
tools arm64: errata: add detection for AMEVCNTR01 incrementing incorrectly 2022-08-23 11:06:48 +01:00
xen xen: allow pv-only hypercalls only with CONFIG_XEN_PV 2021-11-02 08:11:01 -05:00
Kbuild kbuild: use more subdir- for visiting subdirectories while cleaning 2021-10-24 13:49:46 +09:00
Kconfig arm64: compat: Implement misalignment fixups for multiword loads 2022-09-06 09:34:53 +01:00
Kconfig.debug
Kconfig.platforms ARM: new SoC support for 6.0 2022-08-02 08:29:18 -07:00
Makefile kbuild: factor out the common installation code into scripts/install.sh 2022-05-11 21:45:53 +09:00