diff mbox series

crypto: caam: print debugging hex dumps after unmapping

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

Commit Message

Sascha Hauer May 15, 2019, 1:13 p.m. UTC
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(-)

Comments

Horia Geanta May 15, 2019, 4:27 p.m. UTC | #1
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
Sascha Hauer May 16, 2019, 2:25 p.m. UTC | #2
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 mbox series

Patch

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);