summaryrefslogtreecommitdiff
path: root/arch/arm64/Kconfig
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2015-09-15 12:07:06 +0100
committerWill Deacon <will.deacon@arm.com>2015-09-17 11:57:03 +0100
commitbdec97a855ef1e239f130f7a11584721c9a1bf04 (patch)
treecfd363982a2b114bd734829d886e33fe669e9944 /arch/arm64/Kconfig
parente56d82a116176f7af9d642b560abbbd3a2b68013 (diff)
downloadlwn-bdec97a855ef1e239f130f7a11584721c9a1bf04.tar.gz
lwn-bdec97a855ef1e239f130f7a11584721c9a1bf04.zip
arm64: compat: fix vfp save/restore across signal handlers in big-endian
When saving/restoring the VFP registers from a compat (AArch32) signal frame, we rely on the compat registers forming a prefix of the native register file and therefore make use of copy_{to,from}_user to transfer between the native fpsimd_state and the compat_vfp_sigframe. Unfortunately, this doesn't work so well in a big-endian environment. Our fpsimd save/restore code operates directly on 128-bit quantities (Q registers) whereas the compat_vfp_sigframe represents the registers as an array of 64-bit (D) registers. The architecture packs the compat D registers into the Q registers, with the least significant bytes holding the lower register. Consequently, we need to swap the 64-bit halves when converting between these two representations on a big-endian machine. This patch replaces the __copy_{to,from}_user invocations in our compat VFP signal handling code with explicit __put_user loops that operate on 64-bit values and swap them accordingly. Cc: <stable@vger.kernel.org> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm64/Kconfig')
0 files changed, 0 insertions, 0 deletions