提交 34c9a0ff 编写于 作者: H Herbert Xu 提交者: Linus Torvalds

crypto: fix broken crypto_register_instance() module handling

Commit 9c521a20 ("crypto: api - remove instance when test failed")
tried to grab a module reference count before the module was even set.

Worse, it then goes on to free the module reference count after it is
set so you quickly end up with a negative module reference count which
prevents people from using any instances belonging to that module.

This patch moves the module initialisation before the reference
count.
Reported-by: NLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 eea3a002
......@@ -525,12 +525,12 @@ int crypto_register_instance(struct crypto_template *tmpl,
if (err)
return err;
if (unlikely(!crypto_mod_get(&inst->alg)))
return -EAGAIN;
inst->alg.cra_module = tmpl->module;
inst->alg.cra_flags |= CRYPTO_ALG_INSTANCE;
if (unlikely(!crypto_mod_get(&inst->alg)))
return -EAGAIN;
down_write(&crypto_alg_sem);
larval = __crypto_register_alg(&inst->alg);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册