Skip to contentSkip to conversation

Patch "crypto: sha1-mb - make sha1_x8_avx2() conform to C function ABI" has been added to the 4.6-stable tree

PATCH [email protected] 1 participant 1 message May 29, 2016

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

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

to the 4.6-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
crypto-sha1-mb-make-sha1_x8_avx2-conform-to-c-function-abi.patch
and it can be found in the queue-4.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From 4a6b27b79da5ccc6b85dc05bbe6a091e58be896a Mon Sep 17 00:00:00 2001

From: Josh Poimboeuf <[email protected]>
Date: Mon, 16 May 2016 15:16:18 -0500
Subject: crypto: sha1-mb - make sha1_x8_avx2() conform to C function ABI

From: Josh Poimboeuf <[email protected]>

commit 4a6b27b79da5ccc6b85dc05bbe6a091e58be896a upstream.

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 aec4d0e301f1 ("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 aec4d0e301f1 ("x86/asm/crypto: Simplify stack usage in sha-mb functions")
---
 arch/x86/crypto/sha-mb/sha1_x8_avx2.S |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
arch/x86/crypto/sha-mb/sha1_x8_avx2.S +11 -2
@@ -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)

Patches currently in stable-queue which might be from [email protected] are

queue-4.6/crypto-sha1-mb-make-sha1_x8_avx2-conform-to-c-function-abi.patch