crypto: x86/sha512 - fix possible crash with CFI enabled
[ Upstream commita1d72fa331
] sha512_transform_ssse3(), sha512_transform_avx(), and sha512_transform_rorx() are called via indirect function calls. Therefore they need to use SYM_TYPED_FUNC_START instead of SYM_FUNC_START to cause their type hashes to be emitted when the kernel is built with CONFIG_CFI_CLANG=y. Otherwise, the code crashes with a CFI failure (if the compiler didn't happen to optimize out the indirect calls). Fixes:ccace936ee
("x86: Add types to indirectly called assembly functions") Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Sami Tolvanen <samitolvanen@google.com> Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
76994f2622
commit
ae252643e8
|
@ -48,6 +48,7 @@
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
|
#include <linux/cfi_types.h>
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
|
@ -273,7 +274,7 @@ frame_size = frame_WK + WK_SIZE
|
||||||
# of SHA512 message blocks.
|
# of SHA512 message blocks.
|
||||||
# "blocks" is the message length in SHA512 blocks
|
# "blocks" is the message length in SHA512 blocks
|
||||||
########################################################################
|
########################################################################
|
||||||
SYM_FUNC_START(sha512_transform_avx)
|
SYM_TYPED_FUNC_START(sha512_transform_avx)
|
||||||
test msglen, msglen
|
test msglen, msglen
|
||||||
je nowork
|
je nowork
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,7 @@
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
|
#include <linux/cfi_types.h>
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
|
@ -565,7 +566,7 @@ frame_size = frame_CTX + CTX_SIZE
|
||||||
# of SHA512 message blocks.
|
# of SHA512 message blocks.
|
||||||
# "blocks" is the message length in SHA512 blocks
|
# "blocks" is the message length in SHA512 blocks
|
||||||
########################################################################
|
########################################################################
|
||||||
SYM_FUNC_START(sha512_transform_rorx)
|
SYM_TYPED_FUNC_START(sha512_transform_rorx)
|
||||||
# Save GPRs
|
# Save GPRs
|
||||||
push %rbx
|
push %rbx
|
||||||
push %r12
|
push %r12
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
|
#include <linux/cfi_types.h>
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
|
@ -274,7 +275,7 @@ frame_size = frame_WK + WK_SIZE
|
||||||
# of SHA512 message blocks.
|
# of SHA512 message blocks.
|
||||||
# "blocks" is the message length in SHA512 blocks.
|
# "blocks" is the message length in SHA512 blocks.
|
||||||
########################################################################
|
########################################################################
|
||||||
SYM_FUNC_START(sha512_transform_ssse3)
|
SYM_TYPED_FUNC_START(sha512_transform_ssse3)
|
||||||
|
|
||||||
test msglen, msglen
|
test msglen, msglen
|
||||||
je nowork
|
je nowork
|
||||||
|
|
Loading…
Reference in New Issue