aboutsummaryrefslogtreecommitdiff
path: root/crypto/cmac.c
diff options
context:
space:
mode:
authorEric Biggers2017-05-16 21:03:08 -0700
committerHerbert Xu2017-05-23 12:52:05 +0800
commit9417cd1c517a89ccfb5cc3d3f2a0e50fc64f3445 (patch)
treeb43994034dc0cc3182f306bfd9516a3fefe34381 /crypto/cmac.c
parent248c65056ccca7d51db78e6821ff89a020e168bb (diff)
crypto: x86/aes - Don't use %rbp as temporary register
When using the "aes-asm" implementation of AES (*not* the AES-NI implementation) on an x86_64, v4.12-rc1 kernel with lockdep enabled, the following warning was reported, along with a long unwinder dump: WARNING: kernel stack regs at ffffc90000643558 in kworker/u4:2:155 has bad 'bp' value 000000000000001c The problem is that aes_enc_block() and aes_dec_block() use %rbp as a temporary register, which breaks stack traces if an interrupt occurs. Fix this by replacing %rbp with %r9, which was being used to hold the saved value of %rbp. This required rearranging the AES round macro slightly since %r9d cannot be used as the target of a move from %ah-%dh. Performance is essentially unchanged --- actually about 0.2% faster than before. Interestingly, I also measured aes-generic as being nearly 7% faster than aes-asm, so perhaps aes-asm has outlived its usefulness... Signed-off-by: Eric Biggers <ebiggers@google.com> Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/cmac.c')
0 files changed, 0 insertions, 0 deletions