Commit 4a6b27b7 authored by Josh Poimboeuf's avatar Josh Poimboeuf Committed by Herbert Xu

crypto: sha1-mb - make sha1_x8_avx2() conform to C function ABI

Megha Dey reported a kernel panic in crypto code.  The problem is that
sha1_x8_avx2() clobbers registers r12-r15 without saving and restoring
them.

Before commit aec4d0e3 ("x86/asm/crypto: Simplify stack usage in
sha-mb functions"), those registers were saved and restored by the
callers of the function.  I removed them with that commit because I
didn't realize sha1_x8_avx2() clobbered them.

Fix the potential undefined behavior associated with clobbering the
registers and make the behavior less surprising by changing the
registers to be callee saved/restored to conform with the C function
call ABI.

Also, rdx (aka RSP_SAVE) doesn't need to be saved: I verified that none
of the callers rely on it being saved, and it's not a callee-saved
register in the C ABI.

Fixes: aec4d0e3 ("x86/asm/crypto: Simplify stack usage in sha-mb functions")
Cc: stable@vger.kernel.org # 4.6
Reported-by: default avatarMegha Dey <megha.dey@linux.intel.com>
Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 256b1cfb
...@@ -296,7 +296,11 @@ W14 = TMP_ ...@@ -296,7 +296,11 @@ W14 = TMP_
# #
ENTRY(sha1_x8_avx2) ENTRY(sha1_x8_avx2)
push RSP_SAVE # save callee-saved clobbered registers to comply with C function ABI
push %r12
push %r13
push %r14
push %r15
#save rsp #save rsp
mov %rsp, RSP_SAVE mov %rsp, RSP_SAVE
...@@ -446,7 +450,12 @@ lloop: ...@@ -446,7 +450,12 @@ lloop:
## Postamble ## Postamble
mov RSP_SAVE, %rsp mov RSP_SAVE, %rsp
pop RSP_SAVE
# restore callee-saved clobbered registers
pop %r15
pop %r14
pop %r13
pop %r12
ret ret
ENDPROC(sha1_x8_avx2) ENDPROC(sha1_x8_avx2)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment