Эх сурвалжийг харах

crypto: x86/sha256-avx - 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>
Josh Poimboeuf 8 жил өмнө
parent
commit
673ac6fbc7

+ 7 - 8
arch/x86/crypto/sha256-avx-asm.S

@@ -103,7 +103,7 @@ SRND = %rsi       # clobbers INP
 c = %ecx
 c = %ecx
 d = %r8d
 d = %r8d
 e = %edx
 e = %edx
-TBL = %rbp
+TBL = %r12
 a = %eax
 a = %eax
 b = %ebx
 b = %ebx
 
 
@@ -350,13 +350,13 @@ a = TMP_
 ENTRY(sha256_transform_avx)
 ENTRY(sha256_transform_avx)
 .align 32
 .align 32
 	pushq   %rbx
 	pushq   %rbx
-	pushq   %rbp
+	pushq   %r12
 	pushq   %r13
 	pushq   %r13
 	pushq   %r14
 	pushq   %r14
 	pushq   %r15
 	pushq   %r15
-	pushq   %r12
+	pushq	%rbp
+	movq	%rsp, %rbp
 
 
-	mov	%rsp, %r12
 	subq    $STACK_SIZE, %rsp	# allocate stack space
 	subq    $STACK_SIZE, %rsp	# allocate stack space
 	and	$~15, %rsp		# align stack pointer
 	and	$~15, %rsp		# align stack pointer
 
 
@@ -452,13 +452,12 @@ loop2:
 
 
 done_hash:
 done_hash:
 
 
-	mov	%r12, %rsp
-
-	popq	%r12
+	mov	%rbp, %rsp
+	popq	%rbp
 	popq    %r15
 	popq    %r15
 	popq    %r14
 	popq    %r14
 	popq    %r13
 	popq    %r13
-	popq    %rbp
+	popq	%r12
 	popq    %rbx
 	popq    %rbx
 	ret
 	ret
 ENDPROC(sha256_transform_avx)
 ENDPROC(sha256_transform_avx)