aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/crypto/sha1_ssse3_glue.c
diff options
context:
space:
mode:
authormegha.dey@linux.intel.com <megha.dey@linux.intel.com>2017-08-02 13:49:09 -0700
committerHerbert Xu <herbert@gondor.apana.org.au>2017-08-09 20:01:37 +0800
commit8861249c740fc4af9ddc5aee321eafefb960d7c6 (patch)
tree1c79fc822f74626f9a8dbf80b17c93a8d3b59801 /arch/x86/crypto/sha1_ssse3_glue.c
parentcrypto: ixp4xx - Fix error handling path in 'aead_perform()' (diff)
downloadlinux-dev-8861249c740fc4af9ddc5aee321eafefb960d7c6.tar.xz
linux-dev-8861249c740fc4af9ddc5aee321eafefb960d7c6.zip
crypto: x86/sha1 - Fix reads beyond the number of blocks passed
It was reported that the sha1 AVX2 function(sha1_transform_avx2) is reading ahead beyond its intended data, and causing a crash if the next block is beyond page boundary: http://marc.info/?l=linux-crypto-vger&m=149373371023377 This patch makes sure that there is no overflow for any buffer length. It passes the tests written by Jan Stancek that revealed this problem: https://github.com/jstancek/sha1-avx2-crash I have re-enabled sha1-avx2 by reverting commit b82ce24426a4071da9529d726057e4e642948667 Cc: <stable@vger.kernel.org> Fixes: b82ce24426a4 ("crypto: sha1-ssse3 - Disable avx2") Originally-by: Ilya Albrekht <ilya.albrekht@intel.com> Tested-by: Jan Stancek <jstancek@redhat.com> Signed-off-by: Megha Dey <megha.dey@linux.intel.com> Reported-by: Jan Stancek <jstancek@redhat.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'arch/x86/crypto/sha1_ssse3_glue.c')
-rw-r--r--arch/x86/crypto/sha1_ssse3_glue.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/crypto/sha1_ssse3_glue.c b/arch/x86/crypto/sha1_ssse3_glue.c
index f960a043cdeb..fc61739150e7 100644
--- a/arch/x86/crypto/sha1_ssse3_glue.c
+++ b/arch/x86/crypto/sha1_ssse3_glue.c
@@ -201,7 +201,7 @@ asmlinkage void sha1_transform_avx2(u32 *digest, const char *data,
static bool avx2_usable(void)
{
- if (false && avx_usable() && boot_cpu_has(X86_FEATURE_AVX2)
+ if (avx_usable() && boot_cpu_has(X86_FEATURE_AVX2)
&& boot_cpu_has(X86_FEATURE_BMI1)
&& boot_cpu_has(X86_FEATURE_BMI2))
return true;