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 commitaec4d0e301
("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:aec4d0e301
("x86/asm/crypto: Simplify stack usage in sha-mb functions") Cc: stable@vger.kernel.org # 4.6 Reported-by: Megha Dey <megha.dey@linux.intel.com> Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
256b1cfb9a
commit
4a6b27b79d
@ -296,7 +296,11 @@ W14 = TMP_
|
||||
#
|
||||
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
|
||||
mov %rsp, RSP_SAVE
|
||||
@ -446,7 +450,12 @@ lloop:
|
||||
## Postamble
|
||||
|
||||
mov RSP_SAVE, %rsp
|
||||
pop RSP_SAVE
|
||||
|
||||
# restore callee-saved clobbered registers
|
||||
pop %r15
|
||||
pop %r14
|
||||
pop %r13
|
||||
pop %r12
|
||||
|
||||
ret
|
||||
ENDPROC(sha1_x8_avx2)
|
||||
|
Loading…
Reference in New Issue
Block a user