On Tue, Jan 13, 2009 at 10:34:13AM +0800, Huang Ying wrote: > > static void ablk_complete(struct crypto_async_request *req, int err) > { > struct ablkcipher_request *ablk_req = ablkcipher_request_cast(req); > struct async_aes_req_ctx *req_ctx = > ablk_aes_req_ctx(ablk_req, crypto_ablkcipher_reqtfm(ablk_req)); This is not guaranteed to work. Your completion caller may be called with a request pointer other than the one that you passed to it. The only thing we guarantee is that req->data has the value that you set at the beginning. Cheers, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html