aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Poimboeuf <jpoimboe@redhat.com>2017-09-18 15:42:05 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2017-09-20 05:42:34 -0400
commitd7b1722c72aa915283ada27709c6feeb392f6038 (patch)
treea5b78c49b6286a2d189c56da289a2b2a9b79329a
parent3ed7b4d67c6745300c9b5c6baa55da1161b57f60 (diff)
crypto: x86/sha1-avx2 - Fix RBP usage
Using RBP as a temporary register breaks frame pointer convention and breaks stack traces when unwinding from an interrupt in the crypto code. Use R11 instead of RBP. Since R11 isn't a callee-saved register, it doesn't need to be saved and restored on the stack. Reported-by: Eric Biggers <ebiggers@google.com> Reported-by: Peter Zijlstra <peterz@infradead.org> Tested-by: Eric Biggers <ebiggers@google.com> Acked-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--arch/x86/crypto/sha1_avx2_x86_64_asm.S4
1 files changed, 1 insertions, 3 deletions
diff --git a/arch/x86/crypto/sha1_avx2_x86_64_asm.S b/arch/x86/crypto/sha1_avx2_x86_64_asm.S
index 1eab79c9ac48..9f712a7dfd79 100644
--- a/arch/x86/crypto/sha1_avx2_x86_64_asm.S
+++ b/arch/x86/crypto/sha1_avx2_x86_64_asm.S
@@ -89,7 +89,7 @@
89#define REG_RE %rdx 89#define REG_RE %rdx
90#define REG_RTA %r12 90#define REG_RTA %r12
91#define REG_RTB %rbx 91#define REG_RTB %rbx
92#define REG_T1 %ebp 92#define REG_T1 %r11d
93#define xmm_mov vmovups 93#define xmm_mov vmovups
94#define avx2_zeroupper vzeroupper 94#define avx2_zeroupper vzeroupper
95#define RND_F1 1 95#define RND_F1 1
@@ -637,7 +637,6 @@ _loop3:
637 ENTRY(\name) 637 ENTRY(\name)
638 638
639 push %rbx 639 push %rbx
640 push %rbp
641 push %r12 640 push %r12
642 push %r13 641 push %r13
643 push %r14 642 push %r14
@@ -673,7 +672,6 @@ _loop3:
673 pop %r14 672 pop %r14
674 pop %r13 673 pop %r13
675 pop %r12 674 pop %r12
676 pop %rbp
677 pop %rbx 675 pop %rbx
678 676
679 ret 677 ret