Message ID | 20190515131324.22793-1-s.hauer@pengutronix.de (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Herbert Xu |
Headers | show |
Series | crypto: caam: print debugging hex dumps after unmapping | expand |
On 5/15/2019 4:13 PM, Sascha Hauer wrote: > The debugging hex dumps in skcipher_encrypt_done() and > skcipher_decrypt_done() are printed while the request is still DMA > mapped. This results in bogus hex dumps with things like mixtures > between plain text and cipher text. Unmap first before printing. > The description is not accurate. req->iv is no longer DMA mapped since commit 115957bb3e59 ("crypto: caam - fix IV DMA mapping and updating"), so this is not related to IV DMA unmapping vs. print order. Currently: -for encryption, printed req->iv contains the input IV; copy of output IV into req->iv is done further below -for decryption, printed req->iv should be correct, since output IV is copied into req->iv in skcipher_decrypt(), before accelerator runs Could you please resubmit with updated message? Thanks, Horia
On Wed, May 15, 2019 at 04:27:51PM +0000, Horia Geanta wrote: > On 5/15/2019 4:13 PM, Sascha Hauer wrote: > > The debugging hex dumps in skcipher_encrypt_done() and > > skcipher_decrypt_done() are printed while the request is still DMA > > mapped. This results in bogus hex dumps with things like mixtures > > between plain text and cipher text. Unmap first before printing. > > > The description is not accurate. > req->iv is no longer DMA mapped since commit 115957bb3e59 ("crypto: caam - fix > IV DMA mapping and updating"), so this is not related to IV DMA unmapping vs. > print order. > > Currently: > -for encryption, printed req->iv contains the input IV; copy of output IV into > req->iv is done further below > -for decryption, printed req->iv should be correct, since output IV is copied > into req->iv in skcipher_decrypt(), before accelerator runs > > Could you please resubmit with updated message? Just did that. Thanks Sascha
diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c index 3e23d4b2cce2..a992ff56fd15 100644 --- a/drivers/crypto/caam/caamalg.c +++ b/drivers/crypto/caam/caamalg.c @@ -1009,15 +1009,6 @@ static void skcipher_encrypt_done(struct device *jrdev, u32 *desc, u32 err, if (err) caam_jr_strstatus(jrdev, err); -#ifdef DEBUG - print_hex_dump(KERN_ERR, "dstiv @"__stringify(__LINE__)": ", - DUMP_PREFIX_ADDRESS, 16, 4, req->iv, - edesc->src_nents > 1 ? 100 : ivsize, 1); -#endif - caam_dump_sg(KERN_ERR, "dst @" __stringify(__LINE__)": ", - DUMP_PREFIX_ADDRESS, 16, 4, req->dst, - edesc->dst_nents > 1 ? 100 : req->cryptlen, 1); - skcipher_unmap(jrdev, edesc, req); /* @@ -1028,6 +1019,15 @@ static void skcipher_encrypt_done(struct device *jrdev, u32 *desc, u32 err, scatterwalk_map_and_copy(req->iv, req->dst, req->cryptlen - ivsize, ivsize, 0); +#ifdef DEBUG + print_hex_dump(KERN_ERR, "dstiv @"__stringify(__LINE__)": ", + DUMP_PREFIX_ADDRESS, 16, 4, req->iv, + edesc->src_nents > 1 ? 100 : ivsize, 1); +#endif + caam_dump_sg(KERN_ERR, "dst @" __stringify(__LINE__)": ", + DUMP_PREFIX_ADDRESS, 16, 4, req->dst, + edesc->dst_nents > 1 ? 100 : req->cryptlen, 1); + kfree(edesc); skcipher_request_complete(req, err); @@ -1049,6 +1049,8 @@ static void skcipher_decrypt_done(struct device *jrdev, u32 *desc, u32 err, if (err) caam_jr_strstatus(jrdev, err); + skcipher_unmap(jrdev, edesc, req); + #ifdef DEBUG print_hex_dump(KERN_ERR, "dstiv @"__stringify(__LINE__)": ", DUMP_PREFIX_ADDRESS, 16, 4, req->iv, ivsize, 1); @@ -1057,7 +1059,6 @@ static void skcipher_decrypt_done(struct device *jrdev, u32 *desc, u32 err, DUMP_PREFIX_ADDRESS, 16, 4, req->dst, edesc->dst_nents > 1 ? 100 : req->cryptlen, 1); - skcipher_unmap(jrdev, edesc, req); kfree(edesc); skcipher_request_complete(req, err);
The debugging hex dumps in skcipher_encrypt_done() and skcipher_decrypt_done() are printed while the request is still DMA mapped. This results in bogus hex dumps with things like mixtures between plain text and cipher text. Unmap first before printing. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- drivers/crypto/caam/caamalg.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-)