crypto: x86/sha1-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 REG_D 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>
This commit is contained in:
Josh Poimboeuf 2017-09-18 14:42:06 -05:00 committed by Herbert Xu
parent d7b1722c72
commit 6488bce756

View File

@ -37,7 +37,7 @@
#define REG_A %ecx
#define REG_B %esi
#define REG_C %edi
#define REG_D %ebp
#define REG_D %r12d
#define REG_E %edx
#define REG_T1 %eax
@ -74,10 +74,10 @@
ENTRY(\name)
push %rbx
push %rbp
push %r12
push %rbp
mov %rsp, %rbp
mov %rsp, %r12
sub $64, %rsp # allocate workspace
and $~15, %rsp # align stack
@ -99,10 +99,9 @@
xor %rax, %rax
rep stosq
mov %r12, %rsp # deallocate workspace
pop %r12
mov %rbp, %rsp # deallocate workspace
pop %rbp
pop %r12
pop %rbx
ret