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
This commit is contained in:
commit
ec3fbff030
@ -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 @@
|
|||||||
.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:
|
|||||||
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.=<<___;
|
|||||||
# 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.=<<___;
|
|||||||
.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:
|
|||||||
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)
|
|||||||
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)
|
|||||||
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;
|
||||||
|
Loading…
Reference in New Issue
Block a user