[PATCH 0/2] arm64/sve: Fix mutating register endianness on big-endian
Dave Martin <[email protected]>
| Newsgroups | gmane.linux.ports.arm.kernel,gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
By inspection while debugging something else, I noticed that the byte order of FPSIMD V-register stores and SVE Z-register stores is not the same when running on big-endian. This is not properly taken into account when moving between the FPSIMD and SVE register views inside the kernel, resulting in the bytes of a V-register getting spontaneously reversed in some situations, from userspace's point of view. The signal frame and ptrace interface are also affected. The KVM ABI forbids mixing the two views and so should not be affected. See patch 2 for details. Patch 1 does some trivial preparatory refactoring. gdb may or may not be affected by this, depending on how it uses the NT_PRFPREG and NT_ARM_SVE regsets. I'll leave it to the developers to assess that. Dave Martin (2): arm64/sve: Factor out FPSIMD to SVE state conversion arm64/sve: Fix missing SVE/FPSIMD endianness conversions Documentation/arm64/sve.txt | 16 +++++++++++ arch/arm64/include/uapi/asm/kvm.h | 7 +++++ arch/arm64/include/uapi/asm/ptrace.h | 4 +++ arch/arm64/include/uapi/asm/sigcontext.h | 14 +++++++++ arch/arm64/kernel/fpsimd.c | 49 ++++++++++++++++++++++++-------- 5 files changed, 78 insertions(+), 12 deletions(-) -- 2.1.4