On Tue, Jul 18, 2017 at 06:18:59PM -0700, Megha Dey wrote: > > > >> +/* > > >> + * CRYPTO_ALG_ASYNC flag is passed to indicate we have an ablk > > >> + * scatter-gather walk. > > >> + */ > > >> +static struct skcipher_alg aes_cbc_mb_alg = { > > >> + .base = { > > >> + .cra_name = "cbc(aes)", > > >> + .cra_driver_name = "cbc-aes-aesni-mb", > > >> + .cra_priority = 500, > > >> + .cra_flags = CRYPTO_ALG_INTERNAL, > > >> + .cra_blocksize = AES_BLOCK_SIZE, > > >> + .cra_ctxsize = CRYPTO_AES_CTX_SIZE, > > >> + .cra_module = THIS_MODULE, > > >> + }, > > >> + .min_keysize = AES_MIN_KEY_SIZE, > > >> + .max_keysize = AES_MAX_KEY_SIZE, > > >> + .ivsize = AES_BLOCK_SIZE, > > >> + .setkey = aes_set_key, > > >> + .encrypt = mb_aes_cbc_encrypt, > > >> + .decrypt = mb_aes_cbc_decrypt > > >> +}; > > > > > > So this claims to be a sync algorithm. Is this really the case? > > yes, the inner algorithm is sync whereas the outer algorithm is async. Are you saying that once mb_aes_cbc_encrypt returns it will never touch the input/output again? This doesn't seem to agree with the actual code: + if (!ret_rctx) { + /* we submitted a job, but none completed */ + /* just notify the caller */ + notify_callback(rctx, cstate, -EINPROGRESS); + return 0; + } Just because an algorithm is internal doesn't mean that it can arbitrarily violate the crypto API requirements. Cheers, -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt