summaryrefslogtreecommitdiffstats
path: root/crypto/testmgr.c
diff options
context:
space:
mode:
authorAndrey Ryabinin <aryabinin@virtuozzo.com>2015-09-10 06:11:55 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2015-09-11 10:09:43 -0400
commit84cba178a3b88efe2668a9039f70abda072faa21 (patch)
tree4ae19b43c59091f110a1094c7de60cd5d249f026 /crypto/testmgr.c
parent9da75de030bb6e49475ef37c8495d07e98cfeb33 (diff)
crypto: testmgr - don't copy from source IV too much
While the destination buffer 'iv' is MAX_IVLEN size, the source 'template[i].iv' could be smaller, thus memcpy may read read invalid memory. Use crypto_skcipher_ivsize() to get real ivsize and pass it to memcpy. Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/testmgr.c')
-rw-r--r--crypto/testmgr.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index 35c2de136971..fa18753f5c34 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -940,6 +940,7 @@ static int __test_skcipher(struct crypto_skcipher *tfm, int enc,
940 char *xbuf[XBUFSIZE]; 940 char *xbuf[XBUFSIZE];
941 char *xoutbuf[XBUFSIZE]; 941 char *xoutbuf[XBUFSIZE];
942 int ret = -ENOMEM; 942 int ret = -ENOMEM;
943 unsigned int ivsize = crypto_skcipher_ivsize(tfm);
943 944
944 if (testmgr_alloc_buf(xbuf)) 945 if (testmgr_alloc_buf(xbuf))
945 goto out_nobuf; 946 goto out_nobuf;
@@ -975,7 +976,7 @@ static int __test_skcipher(struct crypto_skcipher *tfm, int enc,
975 continue; 976 continue;
976 977
977 if (template[i].iv) 978 if (template[i].iv)
978 memcpy(iv, template[i].iv, MAX_IVLEN); 979 memcpy(iv, template[i].iv, ivsize);
979 else 980 else
980 memset(iv, 0, MAX_IVLEN); 981 memset(iv, 0, MAX_IVLEN);
981 982
@@ -1051,7 +1052,7 @@ static int __test_skcipher(struct crypto_skcipher *tfm, int enc,
1051 continue; 1052 continue;
1052 1053
1053 if (template[i].iv) 1054 if (template[i].iv)
1054 memcpy(iv, template[i].iv, MAX_IVLEN); 1055 memcpy(iv, template[i].iv, ivsize);
1055 else 1056 else
1056 memset(iv, 0, MAX_IVLEN); 1057 memset(iv, 0, MAX_IVLEN);
1057 1058