X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=crypto%2Fapi.c;h=a5317b2fbf4f7fd8bffc36794caec0541566aba4;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=a1920d501e6b90334cf51251aa01ddf104643e40;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/crypto/api.c b/crypto/api.c index a1920d501..a5317b2fb 100644 --- a/crypto/api.c +++ b/crypto/api.c @@ -175,10 +175,12 @@ struct crypto_tfm *crypto_alloc_tfm2(const char *name, u32 flags, struct crypto_alg *alg; unsigned int tfm_size; - if (!nomodload) + if (!nomodload) { alg = crypto_alg_mod_lookup(name); - else + } + else { alg = crypto_alg_lookup(name); + } if (alg == NULL) goto out; @@ -193,16 +195,13 @@ struct crypto_tfm *crypto_alloc_tfm2(const char *name, u32 flags, if (crypto_init_flags(tfm, flags)) goto out_free_tfm; - if (crypto_init_ops(tfm)) + if (crypto_init_ops(tfm)) { + crypto_exit_ops(tfm); goto out_free_tfm; - - if (alg->cra_init && alg->cra_init(tfm)) - goto cra_init_failed; + } goto out; -cra_init_failed: - crypto_exit_ops(tfm); out_free_tfm: kfree(tfm); tfm = NULL; @@ -228,8 +227,6 @@ void crypto_free_tfm(struct crypto_tfm *tfm) alg = tfm->__crt_alg; size = sizeof(*tfm) + alg->cra_ctxsize; - if (alg->cra_exit) - alg->cra_exit(tfm); crypto_exit_ops(tfm); crypto_alg_put(alg); memset(tfm, 0, size); @@ -239,7 +236,7 @@ void crypto_free_tfm(struct crypto_tfm *tfm) static inline int crypto_set_driver_name(struct crypto_alg *alg) { static const char suffix[] = "-generic"; - char *driver_name = alg->cra_driver_name; + char *driver_name = (char *)alg->cra_driver_name; int len; if (*driver_name) @@ -277,13 +274,13 @@ int crypto_register_alg(struct crypto_alg *alg) down_write(&crypto_alg_sem); list_for_each_entry(q, &crypto_alg_list, cra_list) { - if (q == alg) { + if (!strcmp(q->cra_driver_name, alg->cra_driver_name)) { ret = -EEXIST; goto out; } } - list_add(&alg->cra_list, &crypto_alg_list); + list_add_tail(&alg->cra_list, &crypto_alg_list); out: up_write(&crypto_alg_sem); return ret;