diff options
| author | Josh Poimboeuf <jpoimboe@redhat.com> | 2017-09-18 14:42:09 -0500 | 
|---|---|---|
| committer | Herbert Xu <herbert@gondor.apana.org.au> | 2017-09-20 17:42:37 +0800 | 
| commit | 539012dcbdd1ff028268764385ed1f6d600812a7 (patch) | |
| tree | 70af2b7c2bebc7b31f6a0535eac4585f5fec55de /arch/x86/crypto/sha256-ssse3-asm.S | |
| parent | d3dfbfe2e6e7ecd620531d5201314ad14c4ed5b3 (diff) | |
crypto: x86/sha256-ssse3 - 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.
Swap the usages of R12 and RBP.  Use R12 for the TBL register, and use
RBP to store the pre-aligned stack pointer.
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>
Diffstat (limited to 'arch/x86/crypto/sha256-ssse3-asm.S')
| -rw-r--r-- | arch/x86/crypto/sha256-ssse3-asm.S | 15 | 
1 files changed, 7 insertions, 8 deletions
| diff --git a/arch/x86/crypto/sha256-ssse3-asm.S b/arch/x86/crypto/sha256-ssse3-asm.S index 39b83c93e7fd..c6c05ed2c16a 100644 --- a/arch/x86/crypto/sha256-ssse3-asm.S +++ b/arch/x86/crypto/sha256-ssse3-asm.S @@ -95,7 +95,7 @@ SRND = %rsi       # clobbers INP  c = %ecx  d = %r8d  e = %edx -TBL = %rbp +TBL = %r12  a = %eax  b = %ebx @@ -356,13 +356,13 @@ a = TMP_  ENTRY(sha256_transform_ssse3)  .align 32  	pushq   %rbx -	pushq   %rbp +	pushq   %r12  	pushq   %r13  	pushq   %r14  	pushq   %r15 -	pushq   %r12 +	pushq   %rbp +	mov	%rsp, %rbp -	mov	%rsp, %r12  	subq    $STACK_SIZE, %rsp  	and	$~15, %rsp @@ -462,13 +462,12 @@ loop2:  done_hash: -	mov	%r12, %rsp - -	popq    %r12 +	mov	%rbp, %rsp +	popq	%rbp  	popq    %r15  	popq    %r14  	popq    %r13 -	popq    %rbp +	popq    %r12  	popq    %rbx  	ret | 
