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.ha...@pengutronix.de>
---
 drivers/crypto/caam/caamalg.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

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

Reply via email to