[CRYPTO] api: Read module pointer before freeing algorithm
authorHerbert Xu <herbert@gondor.apana.org.au>
Sat, 19 May 2007 04:51:00 +0000 (14:51 +1000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sat, 19 May 2007 04:51:00 +0000 (14:51 +1000)
The function crypto_mod_put first frees the algorithm and then drops
the reference to its module.  Unfortunately we read the module pointer
which after freeing the algorithm and that pointer sits inside the
object that we just freed.

So this patch reads the module pointer out before we free the object.

Thanks to Luca Tettamanti for reporting this.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/api.c

index 55af8bb0f0502eb7f80f3ed2c71fb21518319252..33734fd9198f09f829da60fe14d6b06dd8e40515 100644 (file)
@@ -48,8 +48,10 @@ EXPORT_SYMBOL_GPL(crypto_mod_get);
 
 void crypto_mod_put(struct crypto_alg *alg)
 {
+       struct module *module = alg->cra_module;
+
        crypto_alg_put(alg);
-       module_put(alg->cra_module);
+       module_put(module);
 }
 EXPORT_SYMBOL_GPL(crypto_mod_put);