On 6/19/2017 1:31 PM, Horia Geantă wrote: > On 6/2/2017 3:25 PM, David Gstir wrote: >> Certain cipher modes like CTS expect the IV (req->info) of >> ablkcipher_request (or equivalently req->iv of skcipher_request) to >> contain the last ciphertext block when the {en,de}crypt operation is done. >> This is currently not the case for the CAAM driver which in turn breaks >> e.g. cts(cbc(aes)) when the CAAM driver is enabled. >> >> This patch fixes the CAAM driver to properly set the IV after the >> {en,de}crypt operation of ablkcipher finishes. >> >> Signed-off-by: David Gstir <david@xxxxxxxxxxxxx> >> --- >> drivers/crypto/caam/caamalg.c | 26 ++++++++++++++++++++++++-- >> 1 file changed, 24 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c >> index 398807d1b77e..d13c1aee4427 100644 >> --- a/drivers/crypto/caam/caamalg.c >> +++ b/drivers/crypto/caam/caamalg.c >> @@ -882,10 +882,11 @@ static void ablkcipher_encrypt_done(struct device *jrdev, u32 *desc, u32 err, >> { >> struct ablkcipher_request *req = context; >> struct ablkcipher_edesc *edesc; >> -#ifdef DEBUG >> struct crypto_ablkcipher *ablkcipher = crypto_ablkcipher_reqtfm(req); >> int ivsize = crypto_ablkcipher_ivsize(ablkcipher); >> + int nents; >> >> +#ifdef DEBUG >> dev_err(jrdev, "%s %d: err 0x%x\n", __func__, __LINE__, err); >> #endif >> >> @@ -904,6 +905,19 @@ static void ablkcipher_encrypt_done(struct device *jrdev, u32 *desc, u32 err, >> #endif [snip] >> + sg_pcopy_to_buffer(req->dst, nents, req->info, ivsize, >> + req->nbytes - ivsize); > > scatterwalk_map_and_copy() should be used instead. > David, IIUC this is the only change needed in this patch (applies both for encryption and decryption, of course). Will you formally resubmit? Thanks, Horia