crypto: ccree - use devm_k[mz]alloc() for AEAD data
authorGeert Uytterhoeven <geert+renesas@glider.be>
Tue, 11 Feb 2020 18:19:26 +0000 (19:19 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sat, 22 Feb 2020 01:25:46 +0000 (09:25 +0800)
As the lifetime of the AEAD data matches the lifetime of the driver,
AEAD data can be allocated using the managed allocators.
While at it, simplify cc_aead_free() by removing an unneeded cast, and
an unneeded check (aead_handle is always valid here).

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/ccree/cc_aead.c
drivers/crypto/ccree/cc_cipher.c
drivers/crypto/ccree/cc_hash.c

index be26aaf75e1fe9ea8d0a9c875c42e801006742ec..904aa66752b3bdf455b2b6b41452b19abb8cb9db 100644 (file)
@@ -2615,7 +2615,7 @@ static struct cc_crypto_alg *cc_create_aead_alg(struct cc_alg_template *tmpl,
        struct cc_crypto_alg *t_alg;
        struct aead_alg *alg;
 
-       t_alg = kzalloc(sizeof(*t_alg), GFP_KERNEL);
+       t_alg = devm_kzalloc(dev, sizeof(*t_alg), GFP_KERNEL);
        if (!t_alg)
                return ERR_PTR(-ENOMEM);
 
@@ -2645,19 +2645,12 @@ static struct cc_crypto_alg *cc_create_aead_alg(struct cc_alg_template *tmpl,
 int cc_aead_free(struct cc_drvdata *drvdata)
 {
        struct cc_crypto_alg *t_alg, *n;
-       struct cc_aead_handle *aead_handle =
-               (struct cc_aead_handle *)drvdata->aead_handle;
-
-       if (aead_handle) {
-               /* Remove registered algs */
-               list_for_each_entry_safe(t_alg, n, &aead_handle->aead_list,
-                                        entry) {
-                       crypto_unregister_aead(&t_alg->aead_alg);
-                       list_del(&t_alg->entry);
-                       kfree(t_alg);
-               }
-               kfree(aead_handle);
-               drvdata->aead_handle = NULL;
+       struct cc_aead_handle *aead_handle = drvdata->aead_handle;
+
+       /* Remove registered algs */
+       list_for_each_entry_safe(t_alg, n, &aead_handle->aead_list, entry) {
+               crypto_unregister_aead(&t_alg->aead_alg);
+               list_del(&t_alg->entry);
        }
 
        return 0;
@@ -2671,7 +2664,7 @@ int cc_aead_alloc(struct cc_drvdata *drvdata)
        int alg;
        struct device *dev = drvdata_to_dev(drvdata);
 
-       aead_handle = kmalloc(sizeof(*aead_handle), GFP_KERNEL);
+       aead_handle = devm_kmalloc(dev, sizeof(*aead_handle), GFP_KERNEL);
        if (!aead_handle) {
                rc = -ENOMEM;
                goto fail0;
@@ -2706,18 +2699,16 @@ int cc_aead_alloc(struct cc_drvdata *drvdata)
                if (rc) {
                        dev_err(dev, "%s alg registration failed\n",
                                t_alg->aead_alg.base.cra_driver_name);
-                       goto fail2;
-               } else {
-                       list_add_tail(&t_alg->entry, &aead_handle->aead_list);
-                       dev_dbg(dev, "Registered %s\n",
-                               t_alg->aead_alg.base.cra_driver_name);
+                       goto fail1;
                }
+
+               list_add_tail(&t_alg->entry, &aead_handle->aead_list);
+               dev_dbg(dev, "Registered %s\n",
+                       t_alg->aead_alg.base.cra_driver_name);
        }
 
        return 0;
 
-fail2:
-       kfree(t_alg);
 fail1:
        cc_aead_free(drvdata);
 fail0:
index d219b5b5d7b45dcccb7e601ff89388932a7d266f..fc6df7183024f20fb8249cb1c33c55f5e88163c7 100644 (file)
@@ -1705,11 +1705,11 @@ int cc_cipher_alloc(struct cc_drvdata *drvdata)
                                t_alg->skcipher_alg.base.cra_driver_name);
                        kfree(t_alg);
                        goto fail0;
-               } else {
-                       list_add_tail(&t_alg->entry, &drvdata->alg_list);
-                       dev_dbg(dev, "Registered %s\n",
-                               t_alg->skcipher_alg.base.cra_driver_name);
                }
+
+               list_add_tail(&t_alg->entry, &drvdata->alg_list);
+               dev_dbg(dev, "Registered %s\n",
+                       t_alg->skcipher_alg.base.cra_driver_name);
        }
        return 0;
 
index 738f0debee98ebf122edd4b77cc6b2357aa2d840..2ca5532c07a2e2f4e499a30a54fe19e1091556e8 100644 (file)
@@ -2024,10 +2024,9 @@ int cc_hash_alloc(struct cc_drvdata *drvdata)
                                        driver_hash[alg].driver_name);
                                kfree(t_alg);
                                goto fail;
-                       } else {
-                               list_add_tail(&t_alg->entry,
-                                             &hash_handle->hash_list);
                        }
+
+                       list_add_tail(&t_alg->entry, &hash_handle->hash_list);
                }
                if (hw_mode == DRV_CIPHER_XCBC_MAC ||
                    hw_mode == DRV_CIPHER_CMAC)
@@ -2049,9 +2048,9 @@ int cc_hash_alloc(struct cc_drvdata *drvdata)
                                driver_hash[alg].driver_name);
                        kfree(t_alg);
                        goto fail;
-               } else {
-                       list_add_tail(&t_alg->entry, &hash_handle->hash_list);
                }
+
+               list_add_tail(&t_alg->entry, &hash_handle->hash_list);
        }
 
        return 0;