forked from luck/tmp_suning_uos_patched
crypto: aesni-intel - Fix remaining leak in rfc4106_set_hash_key
Fix up previous patch that failed to properly fix mem leak in rfc4106_set_hash_subkey(). This add-on patch; fixes the leak. moves kfree() out of the error path, returns -ENOMEM rather than -EINVAL when ablkcipher_request_alloc() fails. Signed-off-by: Jesper Juhl <jj@chaosbits.net> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
36be070ac6
commit
fc9044e2db
|
@ -874,19 +874,17 @@ rfc4106_set_hash_subkey(u8 *hash_subkey, const u8 *key, unsigned int key_len)
|
||||||
|
|
||||||
ret = crypto_ablkcipher_setkey(ctr_tfm, key, key_len);
|
ret = crypto_ablkcipher_setkey(ctr_tfm, key, key_len);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
|
||||||
|
|
||||||
req = ablkcipher_request_alloc(ctr_tfm, GFP_KERNEL);
|
|
||||||
if (!req) {
|
|
||||||
ret = -EINVAL;
|
|
||||||
goto out_free_ablkcipher;
|
goto out_free_ablkcipher;
|
||||||
}
|
|
||||||
|
ret = -ENOMEM;
|
||||||
|
req = ablkcipher_request_alloc(ctr_tfm, GFP_KERNEL);
|
||||||
|
if (!req)
|
||||||
|
goto out_free_ablkcipher;
|
||||||
|
|
||||||
req_data = kmalloc(sizeof(*req_data), GFP_KERNEL);
|
req_data = kmalloc(sizeof(*req_data), GFP_KERNEL);
|
||||||
if (!req_data) {
|
if (!req_data)
|
||||||
ret = -ENOMEM;
|
|
||||||
goto out_free_request;
|
goto out_free_request;
|
||||||
}
|
|
||||||
memset(req_data->iv, 0, sizeof(req_data->iv));
|
memset(req_data->iv, 0, sizeof(req_data->iv));
|
||||||
|
|
||||||
/* Clear the data in the hash sub key container to zero.*/
|
/* Clear the data in the hash sub key container to zero.*/
|
||||||
|
@ -911,12 +909,11 @@ rfc4106_set_hash_subkey(u8 *hash_subkey, const u8 *key, unsigned int key_len)
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = req_data->result.err;
|
ret = req_data->result.err;
|
||||||
}
|
}
|
||||||
|
kfree(req_data);
|
||||||
out_free_request:
|
out_free_request:
|
||||||
ablkcipher_request_free(req);
|
ablkcipher_request_free(req);
|
||||||
kfree(req_data);
|
|
||||||
out_free_ablkcipher:
|
out_free_ablkcipher:
|
||||||
crypto_free_ablkcipher(ctr_tfm);
|
crypto_free_ablkcipher(ctr_tfm);
|
||||||
out:
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user