Arnd Bergmann
c871c10e4e
crypto: serpent - improve __serpent_setkey with UBSAN
...
When UBSAN is enabled, we get a very large stack frame for
__serpent_setkey, when the register allocator ends up using more registers
than it has, and has to spill temporary values to the stack. The code
was originally optimized for in-order x86-32 CPU implementations using
older compilers, but it now runs into a highly suboptimal case on all
CPU architectures, as seen by this warning:
crypto/serpent_generic.c: In function '__serpent_setkey':
crypto/serpent_generic.c:436:1: error: the frame size of 2720 bytes is larger than 2048 bytes [-Werror=frame-larger-than=]
Disabling -fsanitize=alignment would avoid that warning, presumably the
option turns off a optimization step that is required for getting the
register allocation right, but there is no easy way to do that on gcc-7
(gcc-8 introduces a function attribute for this).
I tried to figure out a way to modify the source code instead, and noticed
that the two stages of the setkey() function (keyiter and sbox) each are
fine by themselves, but not when combined into one function. Splitting
out the entire sbox into a separate function also happens to work fine
with all compilers I tried (arm, arm64 and x86).
The setkey function uses a strange way to handle offsets into the key
array, using both negative and positive index values, as well as adjusting
the array pointer back and forth. I have checked that this actually
makes no difference to modern compilers, but I left that untouched
to make the patch easier to review and to keep the code closer to
the reference implementation.
Link: https://patchwork.kernel.org/patch/9189575/
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2017-08-09 20:17:54 +08:00
..
asymmetric_keys
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
2017-07-05 15:17:26 +08:00
async_tx
async_tx: Fix DMA_PREP_FENCE usage in do_async_gen_syndrome()
2017-05-16 10:01:57 +05:30
.gitignore
842.c
crypto: acomp - add support for 842 via scomp
2016-10-25 11:08:33 +08:00
ablk_helper.c
ablkcipher.c
crypto: Replaced gcc specific attributes with macros from compiler.h
2017-01-13 00:24:39 +08:00
acompress.c
crypto: acomp - allow registration of multiple acomps
2017-04-21 20:30:50 +08:00
aead.c
crypto: Replaced gcc specific attributes with macros from compiler.h
2017-01-13 00:24:39 +08:00
aes_generic.c
crypto: aes-generic - drop alignment requirement
2017-02-11 17:50:43 +08:00
aes_ti.c
crypto: aes_ti - fix comment for MixColumns step
2017-06-19 14:11:53 +08:00
af_alg.c
Networking
2017-07-12 18:38:06 +08:00
ahash.c
crypto: ahash - Fix EINPROGRESS notification callback
2017-04-10 19:09:18 +08:00
akcipher.c
crypto: Replaced gcc specific attributes with macros from compiler.h
2017-01-13 00:24:39 +08:00
algapi.c
crypto: algapi - use separate dst and src operands for __crypto_xor()
2017-08-04 09:27:05 +08:00
algboss.c
sched/headers: Prepare to move signal wakeup & sigpending methods from <linux/sched.h> into <linux/sched/signal.h>
2017-03-02 08:42:32 +01:00
algif_aead.c
crypto: algif_aead - copy AAD from src to dst
2017-08-09 20:17:52 +08:00
algif_hash.c
net: Work around lockdep limitation in sockets that use sockets
2017-03-09 18:23:27 -08:00
algif_rng.c
algif_skcipher.c
crypto: algif - return error code when no data was processed
2017-08-09 20:17:50 +08:00
ansi_cprng.c
anubis.c
api.c
sched/headers: Prepare to move signal wakeup & sigpending methods from <linux/sched.h> into <linux/sched/signal.h>
2017-03-02 08:42:32 +01:00
arc4.c
authenc.c
crypto: skcipher - Get rid of crypto_spawn_skcipher2()
2016-11-01 08:37:17 +08:00
authencesn.c
crypto: authencesn - Fix digest_null crash
2017-07-18 17:01:11 +08:00
blkcipher.c
crypto: Replaced gcc specific attributes with macros from compiler.h
2017-01-13 00:24:39 +08:00
blowfish_common.c
blowfish_generic.c
camellia_generic.c
cast5_generic.c
cast6_generic.c
cast_common.c
cbc.c
crypto: cbc - Propagate NEED_FALLBACK bit
2017-03-09 18:34:39 +08:00
ccm.c
crypto: ccm - move cbcmac input off the stack
2017-02-28 17:29:17 +08:00
chacha20_generic.c
crypto: chacha20 - convert generic and x86 versions to skcipher
2016-12-27 17:47:31 +08:00
chacha20poly1305.c
crypto: skcipher - Get rid of crypto_spawn_skcipher2()
2016-11-01 08:37:17 +08:00
cipher.c
crypto: api - Remove no-op exit_ops code
2016-10-21 11:03:42 +08:00
cmac.c
crypto: algapi - make crypto_xor() and crypto_inc() alignment agnostic
2017-02-11 17:52:28 +08:00
compress.c
crypto: api - Remove no-op exit_ops code
2016-10-21 11:03:42 +08:00
crc32_generic.c
crc32c_generic.c
crct10dif_common.c
crct10dif_generic.c
crypto: squash lines for simple wrapper functions
2016-09-13 20:27:26 +08:00
cryptd.c
crypto: cryptd - Add support for skcipher
2016-11-28 21:23:18 +08:00
crypto_engine.c
crypto: engine - replace pr_xxx by dev_xxx
2017-06-19 14:19:54 +08:00
crypto_null.c
crypto_user.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
2017-05-02 16:40:27 -07:00
crypto_wq.c
ctr.c
crypto: algapi - make crypto_xor() take separate dst and src arguments
2017-08-04 09:27:15 +08:00
cts.c
crypto: algapi - make crypto_xor() and crypto_inc() alignment agnostic
2017-02-11 17:52:28 +08:00
deflate.c
crypto: scomp - add support for deflate rfc1950 (zlib)
2017-04-24 18:11:08 +08:00
des_generic.c
dh.c
crypto: dh - comply with crypto_kpp_maxsize()
2017-06-10 12:04:27 +08:00
dh_helper.c
crypto: kpp, (ec)dh - fix typos
2017-06-10 12:04:25 +08:00
drbg.c
crypto: drbg - Fixes panic in wait_for_completion call
2017-06-22 16:47:21 +08:00
ecb.c
ecc.c
crypto: ecdh - add privkey generation support
2017-06-10 12:04:35 +08:00
ecc.h
crypto: ecdh - add privkey generation support
2017-06-10 12:04:35 +08:00
ecc_curve_defs.h
ecdh.c
crypto: ecdh - fix concurrency on shared secret and pubkey
2017-08-03 13:47:22 +08:00
ecdh_helper.c
crypto: kpp, (ec)dh - fix typos
2017-06-10 12:04:25 +08:00
echainiv.c
crypto: echainiv - Replace chaining with multiplication
2016-09-13 18:44:57 +08:00
fcrypt.c
fips.c
gcm.c
crypto: gcm - wait for crypto op not signal safe
2017-05-23 12:45:11 +08:00
gf128mul.c
crypto: gf128mul - define gf128mul_x_* in gf128mul.h
2017-04-05 21:58:35 +08:00
ghash-generic.c
crypto: ghash-generic - move common definitions to a new header file
2016-10-02 22:26:40 +08:00
hash_info.c
hmac.c
crypto: hmac - add hmac IPAD/OPAD constant
2017-05-23 12:52:05 +08:00
internal.h
crypto: api - Remove no-op exit_ops code
2016-10-21 11:03:42 +08:00
jitterentropy-kcapi.c
crypto: jitterentropy - drop duplicate header module.h
2016-11-17 23:34:52 +08:00
jitterentropy.c
Kconfig
crypto: algif_aead - copy AAD from src to dst
2017-08-09 20:17:52 +08:00
keywrap.c
khazad.c
kpp.c
crypto: Replaced gcc specific attributes with macros from compiler.h
2017-01-13 00:24:39 +08:00
lrw.c
crypto: lrw - Fix use-after-free on EINPROGRESS
2017-04-10 19:09:17 +08:00
lz4.c
crypto: lz4 - fixed decompress function to return error code
2017-04-10 19:17:27 +08:00
lz4hc.c
crypto: lz4 - fixed decompress function to return error code
2017-04-10 19:17:27 +08:00
lzo.c
treewide: use kv[mz]alloc* rather than opencoded variants
2017-05-08 17:15:13 -07:00
Makefile
crypto: ecdh - add privkey generation support
2017-06-10 12:04:35 +08:00
mcryptd.c
sched/headers: Prepare for new header dependencies before moving code to <linux/sched/stat.h>
2017-03-02 08:42:34 +01:00
md4.c
md5.c
md5: remove from lib and only live in crypto
2017-03-24 22:02:56 +08:00
memneq.c
michael_mic.c
pcbc.c
crypto: algapi - make crypto_xor() take separate dst and src arguments
2017-08-04 09:27:15 +08:00
pcrypt.c
poly1305_generic.c
crypto: poly1305 - Use unaligned access where required
2016-11-13 17:45:03 +08:00
proc.c
ripemd.h
rmd128.c
rmd160.c
rmd256.c
rmd320.c
rng.c
crypto: rng - ensure that the RNG is ready before using
2017-07-28 17:56:00 +08:00
rsa-pkcs1pad.c
crypto: rsa-pkcs1pad - use constant time memory comparison for MACs
2017-06-20 11:21:19 +08:00
rsa.c
crypto: rsa - comply with crypto_akcipher_maxsize()
2017-06-10 12:04:30 +08:00
rsa_helper.c
crypto: rsa - allow keys >= 2048 bits in FIPS mode
2016-08-24 21:07:10 +08:00
rsaprivkey.asn1
rsapubkey.asn1
salsa20_generic.c
scatterwalk.c
crypto: scatterwalk - Remove unnecessary aliasing check in map_and_copy
2016-11-22 15:02:25 +08:00
scompress.c
crypto: scompress - defer allocation of scratch buffer to first use
2017-08-03 13:52:44 +08:00
seed.c
seqiv.c
crypto: algapi - make crypto_xor() and crypto_inc() alignment agnostic
2017-02-11 17:52:28 +08:00
serpent_generic.c
crypto: serpent - improve __serpent_setkey with UBSAN
2017-08-09 20:17:54 +08:00
sha1_generic.c
sha3_generic.c
crypto: sha3 - Add missing ULL suffixes for 64-bit constants
2016-08-08 23:43:46 +08:00
sha256_generic.c
sha512_generic.c
shash.c
crypto: Replaced gcc specific attributes with macros from compiler.h
2017-01-13 00:24:39 +08:00
simd.c
crypto: simd - Add simd skcipher helper
2016-11-28 21:23:18 +08:00
skcipher.c
crypto: skcipher - Add missing API setkey checks
2017-05-18 13:04:05 +08:00
tcrypt.c
crypto: tcrypt - remove AES-XTS-192 speed tests
2017-08-03 13:47:20 +08:00
tcrypt.h
tea.c
testmgr.c
crypto: testmgr - Reenable sha1/aes in FIPS mode
2017-06-28 22:18:58 +08:00
testmgr.h
crypto: testmgr - add testvector for pkcs1pad(rsa)
2017-06-20 11:21:29 +08:00
tgr192.c
twofish_common.c
twofish_generic.c
vmac.c
wp512.c
xcbc.c
xor.c
crypto: xor - Fix warning when XOR_SELECT_TEMPLATE is unset
2016-08-31 23:00:48 +08:00
xts.c
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
2017-05-02 15:53:46 -07:00