aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/crypto/aesni-intel_glue.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c
index e1e60c7d5813..e0135526345d 100644
--- a/arch/x86/crypto/aesni-intel_glue.c
+++ b/arch/x86/crypto/aesni-intel_glue.c
@@ -873,21 +873,19 @@ rfc4106_set_hash_subkey(u8 *hash_subkey, const u8 *key, unsigned int key_len)
873 crypto_ablkcipher_clear_flags(ctr_tfm, ~0); 873 crypto_ablkcipher_clear_flags(ctr_tfm, ~0);
874 874
875 ret = crypto_ablkcipher_setkey(ctr_tfm, key, key_len); 875 ret = crypto_ablkcipher_setkey(ctr_tfm, key, key_len);
876 if (ret) { 876 if (ret)
877 crypto_free_ablkcipher(ctr_tfm); 877 goto out;
878 return ret;
879 }
880 878
881 req = ablkcipher_request_alloc(ctr_tfm, GFP_KERNEL); 879 req = ablkcipher_request_alloc(ctr_tfm, GFP_KERNEL);
882 if (!req) { 880 if (!req) {
883 crypto_free_ablkcipher(ctr_tfm); 881 ret = -EINVAL;
884 return -EINVAL; 882 goto out_free_ablkcipher;
885 } 883 }
886 884
887 req_data = kmalloc(sizeof(*req_data), GFP_KERNEL); 885 req_data = kmalloc(sizeof(*req_data), GFP_KERNEL);
888 if (!req_data) { 886 if (!req_data) {
889 crypto_free_ablkcipher(ctr_tfm); 887 ret = -ENOMEM;
890 return -ENOMEM; 888 goto out_free_request;
891 } 889 }
892 memset(req_data->iv, 0, sizeof(req_data->iv)); 890 memset(req_data->iv, 0, sizeof(req_data->iv));
893 891
@@ -913,9 +911,12 @@ rfc4106_set_hash_subkey(u8 *hash_subkey, const u8 *key, unsigned int key_len)
913 if (!ret) 911 if (!ret)
914 ret = req_data->result.err; 912 ret = req_data->result.err;
915 } 913 }
914out_free_request:
916 ablkcipher_request_free(req); 915 ablkcipher_request_free(req);
917 kfree(req_data); 916 kfree(req_data);
917out_free_ablkcipher:
918 crypto_free_ablkcipher(ctr_tfm); 918 crypto_free_ablkcipher(ctr_tfm);
919out:
919 return ret; 920 return ret;
920} 921}
921 922