Removed CKRM code base from kernel tree.
[linux-2.6.git] / crypto / api.c
index 6f0e625..99990b5 100644 (file)
@@ -117,12 +117,19 @@ static void crypto_exit_ops(struct crypto_tfm *tfm)
        }
 }
 
-struct crypto_tfm *crypto_alloc_tfm(const char *name, u32 flags)
+struct crypto_tfm *crypto_alloc_tfm2(const char *name, u32 flags,
+                                    int nomodload)
 {
        struct crypto_tfm *tfm = NULL;
        struct crypto_alg *alg;
 
-       alg = crypto_alg_mod_lookup(name);
+       if (!nomodload) {
+               alg = crypto_alg_mod_lookup(name);
+       }
+       else {
+               alg = crypto_alg_lookup(name);
+       }
+
        if (alg == NULL)
                goto out;
        
@@ -153,10 +160,19 @@ out:
        return tfm;
 }
 
+struct crypto_tfm *crypto_alloc_tfm(const char *name, u32 flags)
+{
+       return crypto_alloc_tfm2(name, flags, 0);
+}
+
 void crypto_free_tfm(struct crypto_tfm *tfm)
 {
+       struct crypto_alg *alg = tfm->__crt_alg;
+       int size = sizeof(*tfm) + alg->cra_ctxsize;
+
        crypto_exit_ops(tfm);
-       crypto_alg_put(tfm->__crt_alg);
+       crypto_alg_put(alg);
+       memset(tfm, 0, size);
        kfree(tfm);
 }