diff --git a/crypto/echainiv.c b/crypto/echainiv.c index 08d33367801d090bb49d1cc44fcc87931f98cefb..b6e43dc6135653eddb3e31f9659d54bc774bc6d1 100644 --- a/crypto/echainiv.c +++ b/crypto/echainiv.c @@ -197,8 +197,13 @@ static int echainiv_init(struct crypto_tfm *tfm) crypto_aead_set_reqsize(geniv, sizeof(struct aead_request)); + err = crypto_get_default_rng(); + if (err) + goto out; + err = crypto_rng_get_bytes(crypto_default_rng, ctx->salt, crypto_aead_ivsize(geniv)); + crypto_put_default_rng(); if (err) goto out; @@ -277,35 +282,14 @@ static int echainiv_aead_create(struct crypto_template *tmpl, goto out; } -static int echainiv_create(struct crypto_template *tmpl, struct rtattr **tb) -{ - int err; - - err = crypto_get_default_rng(); - if (err) - goto out; - - err = echainiv_aead_create(tmpl, tb); - if (err) - goto put_rng; - -out: - return err; - -put_rng: - crypto_put_default_rng(); - goto out; -} - static void echainiv_free(struct crypto_instance *inst) { aead_geniv_free(aead_instance(inst)); - crypto_put_default_rng(); } static struct crypto_template echainiv_tmpl = { .name = "echainiv", - .create = echainiv_create, + .create = echainiv_aead_create, .free = echainiv_free, .module = THIS_MODULE, };