aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/tcrypt.c
diff options
context:
space:
mode:
authorChristian Engelmayer <cengelma@gmx.at>2014-04-21 14:45:59 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2014-04-28 06:21:17 -0400
commitac5f863f8c548ab72511213b30368cfc8007ae01 (patch)
tree5bae766d43ab3847ad573c7a0c15d1e395c2b9a7 /crypto/tcrypt.c
parent3d67be2761dc4b5b792037f296f3394a29581efc (diff)
crypto: tcrypt - Fix potential leak in test_aead_speed() if aad_size is too big
Fix a potential memory leak in the error handling of test_aead_speed(). In case the size check on the associate data length parameter fails, the function goes through the wrong exit label. Reported by Coverity - CID 1163870. Signed-off-by: Christian Engelmayer <cengelma@gmx.at> Acked-by: Tim Chen <tim.c.chen@linux.intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/tcrypt.c')
-rw-r--r--crypto/tcrypt.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
index 870be7b4dc05..1856d7ff2688 100644
--- a/crypto/tcrypt.c
+++ b/crypto/tcrypt.c
@@ -282,6 +282,11 @@ static void test_aead_speed(const char *algo, int enc, unsigned int sec,
282 unsigned int *b_size; 282 unsigned int *b_size;
283 unsigned int iv_len; 283 unsigned int iv_len;
284 284
285 if (aad_size >= PAGE_SIZE) {
286 pr_err("associate data length (%u) too big\n", aad_size);
287 return;
288 }
289
285 if (enc == ENCRYPT) 290 if (enc == ENCRYPT)
286 e = "encryption"; 291 e = "encryption";
287 else 292 else
@@ -323,14 +328,7 @@ static void test_aead_speed(const char *algo, int enc, unsigned int sec,
323 b_size = aead_sizes; 328 b_size = aead_sizes;
324 do { 329 do {
325 assoc = axbuf[0]; 330 assoc = axbuf[0];
326 331 memset(assoc, 0xff, aad_size);
327 if (aad_size < PAGE_SIZE)
328 memset(assoc, 0xff, aad_size);
329 else {
330 pr_err("associate data length (%u) too big\n",
331 aad_size);
332 goto out_nosg;
333 }
334 sg_init_one(&asg[0], assoc, aad_size); 332 sg_init_one(&asg[0], assoc, aad_size);
335 333
336 if ((*keysize + *b_size) > TVMEMSIZE * PAGE_SIZE) { 334 if ((*keysize + *b_size) > TVMEMSIZE * PAGE_SIZE) {