linux-stable/arch/mips/crypto
Arnd Bergmann 778aaefb8e asm-generic: unaligned always use struct helpers
As found by Vineet Gupta and Linus Torvalds, gcc has somewhat unexpected
behavior when faced with overlapping unaligned pointers. The kernel's
unaligned/access-ok.h header technically invokes undefined behavior
that happens to usually work on the architectures using it, but if the
compiler optimizes code based on the assumption that undefined behavior
doesn't happen, it can create output that actually causes data corruption.

A related problem was previously found on 32-bit ARMv7, where most
instructions can be used on unaligned data, but 64-bit ldrd/strd causes
an exception. The workaround was to always use the unaligned/le_struct.h
helper instead of unaligned/access-ok.h, in commit 1cce91dfc8 ("ARM:
8715/1: add a private asm/unaligned.h").

The same solution should work on all other architectures as well, so
remove the access-ok.h variant and use the other one unconditionally on
all architectures, picking either the big-endian or little-endian version.

With this, the arm specific header can be removed as well, and the
only file including linux/unaligned/access_ok.h gets moved to including
the normal file.

Fortunately, this made almost no difference to the object code produced
by gcc-11. On x86, s390, powerpc, and arc, the resulting binary appears
to be identical to the previous version, while on arm64 and m68k there
are minimal differences that looks like an optimization pass went into
a different direction, usually using fewer stack spills on the new
version.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100363
2021-05-10 17:50:47 +02:00
..
.gitignore crypto: mips: add poly1305-core.S to .gitignore 2021-03-29 11:19:10 +02:00
chacha-core.S crypto: mips/chacha - wire up accelerated 32r2 code from Zinc 2019-11-17 09:02:40 +08:00
chacha-glue.c crypto: arch - conditionalize crypto api in arch glue for lib code 2019-11-27 13:08:49 +08:00
crc32-mips.c asm-generic: unaligned always use struct helpers 2021-05-10 17:50:47 +02:00
Makefile crypto: mips/poly1305 - enable for all MIPS processors 2021-03-08 11:52:17 +01:00
poly1305-glue.c crypto: poly1305 - fix poly1305_core_setkey() declaration 2021-04-02 18:28:12 +11:00
poly1305-mips.pl crypto: mips/poly1305 - incorporate OpenSSL/CRYPTOGAMS optimized implementation 2019-11-17 09:02:42 +08:00