提交 ec3fbff0 编写于 作者: L Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6

Pull crypto fixes from Herbert Xu:
 "Fix a bug in the ARM XTS implementation that can cause failures in
  decrypting encrypted disks, and fix is a memory overwrite bug that can
  cause a crash which can be triggered from userspace"

* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
  crypto: aesni - fix memory usage in GCM decryption
  crypto: arm/aes update NEON AES module to latest OpenSSL version
...@@ -58,14 +58,18 @@ ...@@ -58,14 +58,18 @@
# define VFP_ABI_FRAME 0 # define VFP_ABI_FRAME 0
# define BSAES_ASM_EXTENDED_KEY # define BSAES_ASM_EXTENDED_KEY
# define XTS_CHAIN_TWEAK # define XTS_CHAIN_TWEAK
# define __ARM_ARCH__ 7 # define __ARM_ARCH__ __LINUX_ARM_ARCH__
# define __ARM_MAX_ARCH__ 7
#endif #endif
#ifdef __thumb__ #ifdef __thumb__
# define adrl adr # define adrl adr
#endif #endif
#if __ARM_ARCH__>=7 #if __ARM_MAX_ARCH__>=7
.arch armv7-a
.fpu neon
.text .text
.syntax unified @ ARMv7-capable assembler is expected to handle this .syntax unified @ ARMv7-capable assembler is expected to handle this
#ifdef __thumb2__ #ifdef __thumb2__
...@@ -74,8 +78,6 @@ ...@@ -74,8 +78,6 @@
.code 32 .code 32
#endif #endif
.fpu neon
.type _bsaes_decrypt8,%function .type _bsaes_decrypt8,%function
.align 4 .align 4
_bsaes_decrypt8: _bsaes_decrypt8:
...@@ -2095,9 +2097,11 @@ bsaes_xts_decrypt: ...@@ -2095,9 +2097,11 @@ bsaes_xts_decrypt:
vld1.8 {q8}, [r0] @ initial tweak vld1.8 {q8}, [r0] @ initial tweak
adr r2, .Lxts_magic adr r2, .Lxts_magic
#ifndef XTS_CHAIN_TWEAK
tst r9, #0xf @ if not multiple of 16 tst r9, #0xf @ if not multiple of 16
it ne @ Thumb2 thing, sanity check in ARM it ne @ Thumb2 thing, sanity check in ARM
subne r9, #0x10 @ subtract another 16 bytes subne r9, #0x10 @ subtract another 16 bytes
#endif
subs r9, #0x80 subs r9, #0x80
blo .Lxts_dec_short blo .Lxts_dec_short
......
...@@ -701,14 +701,18 @@ $code.=<<___; ...@@ -701,14 +701,18 @@ $code.=<<___;
# define VFP_ABI_FRAME 0 # define VFP_ABI_FRAME 0
# define BSAES_ASM_EXTENDED_KEY # define BSAES_ASM_EXTENDED_KEY
# define XTS_CHAIN_TWEAK # define XTS_CHAIN_TWEAK
# define __ARM_ARCH__ 7 # define __ARM_ARCH__ __LINUX_ARM_ARCH__
# define __ARM_MAX_ARCH__ 7
#endif #endif
#ifdef __thumb__ #ifdef __thumb__
# define adrl adr # define adrl adr
#endif #endif
#if __ARM_ARCH__>=7 #if __ARM_MAX_ARCH__>=7
.arch armv7-a
.fpu neon
.text .text
.syntax unified @ ARMv7-capable assembler is expected to handle this .syntax unified @ ARMv7-capable assembler is expected to handle this
#ifdef __thumb2__ #ifdef __thumb2__
...@@ -717,8 +721,6 @@ $code.=<<___; ...@@ -717,8 +721,6 @@ $code.=<<___;
.code 32 .code 32
#endif #endif
.fpu neon
.type _bsaes_decrypt8,%function .type _bsaes_decrypt8,%function
.align 4 .align 4
_bsaes_decrypt8: _bsaes_decrypt8:
...@@ -2076,9 +2078,11 @@ bsaes_xts_decrypt: ...@@ -2076,9 +2078,11 @@ bsaes_xts_decrypt:
vld1.8 {@XMM[8]}, [r0] @ initial tweak vld1.8 {@XMM[8]}, [r0] @ initial tweak
adr $magic, .Lxts_magic adr $magic, .Lxts_magic
#ifndef XTS_CHAIN_TWEAK
tst $len, #0xf @ if not multiple of 16 tst $len, #0xf @ if not multiple of 16
it ne @ Thumb2 thing, sanity check in ARM it ne @ Thumb2 thing, sanity check in ARM
subne $len, #0x10 @ subtract another 16 bytes subne $len, #0x10 @ subtract another 16 bytes
#endif
subs $len, #0x80 subs $len, #0x80
blo .Lxts_dec_short blo .Lxts_dec_short
......
...@@ -1155,7 +1155,7 @@ static int __driver_rfc4106_decrypt(struct aead_request *req) ...@@ -1155,7 +1155,7 @@ static int __driver_rfc4106_decrypt(struct aead_request *req)
src = kmalloc(req->cryptlen + req->assoclen, GFP_ATOMIC); src = kmalloc(req->cryptlen + req->assoclen, GFP_ATOMIC);
if (!src) if (!src)
return -ENOMEM; return -ENOMEM;
assoc = (src + req->cryptlen + auth_tag_len); assoc = (src + req->cryptlen);
scatterwalk_map_and_copy(src, req->src, 0, req->cryptlen, 0); scatterwalk_map_and_copy(src, req->src, 0, req->cryptlen, 0);
scatterwalk_map_and_copy(assoc, req->assoc, 0, scatterwalk_map_and_copy(assoc, req->assoc, 0,
req->assoclen, 0); req->assoclen, 0);
...@@ -1180,7 +1180,7 @@ static int __driver_rfc4106_decrypt(struct aead_request *req) ...@@ -1180,7 +1180,7 @@ static int __driver_rfc4106_decrypt(struct aead_request *req)
scatterwalk_done(&src_sg_walk, 0, 0); scatterwalk_done(&src_sg_walk, 0, 0);
scatterwalk_done(&assoc_sg_walk, 0, 0); scatterwalk_done(&assoc_sg_walk, 0, 0);
} else { } else {
scatterwalk_map_and_copy(dst, req->dst, 0, req->cryptlen, 1); scatterwalk_map_and_copy(dst, req->dst, 0, tempCipherLen, 1);
kfree(src); kfree(src);
} }
return retval; return retval;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册