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);
 
 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;
        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;
                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:
 
                                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;
 
 
                                        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)
                                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;