4.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Zhang Zhijie <zhan...@rock-chips.com>

commit 4359669a087633132203c52d67dd8c31e09e7b2e upstream.

In some cases, the nents of src scatterlist is different from
dst scatterlist. So two variables are used to handle the nents
of src&dst scatterlist.

Reported-by: Eric Biggers <ebigg...@google.com>
Fixes: 433cd2c617bf ("crypto: rockchip - add crypto driver for rk3288")
Cc: <sta...@vger.kernel.org> # v4.5+
Signed-off-by: Zhang Zhijie <zhan...@rock-chips.com>
Signed-off-by: Herbert Xu <herb...@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 drivers/crypto/rockchip/rk3288_crypto.c            |    2 +-
 drivers/crypto/rockchip/rk3288_crypto.h            |    3 ++-
 drivers/crypto/rockchip/rk3288_crypto_ablkcipher.c |    5 +++--
 drivers/crypto/rockchip/rk3288_crypto_ahash.c      |    2 +-
 4 files changed, 7 insertions(+), 5 deletions(-)

--- a/drivers/crypto/rockchip/rk3288_crypto.c
+++ b/drivers/crypto/rockchip/rk3288_crypto.c
@@ -119,7 +119,7 @@ static int rk_load_data(struct rk_crypto
                count = (dev->left_bytes > PAGE_SIZE) ?
                        PAGE_SIZE : dev->left_bytes;
 
-               if (!sg_pcopy_to_buffer(dev->first, dev->nents,
+               if (!sg_pcopy_to_buffer(dev->first, dev->src_nents,
                                        dev->addr_vir, count,
                                        dev->total - dev->left_bytes)) {
                        dev_err(dev->dev, "[%s:%d] pcopy err\n",
--- a/drivers/crypto/rockchip/rk3288_crypto.h
+++ b/drivers/crypto/rockchip/rk3288_crypto.h
@@ -207,7 +207,8 @@ struct rk_crypto_info {
        void                            *addr_vir;
        int                             aligned;
        int                             align_size;
-       size_t                          nents;
+       size_t                          src_nents;
+       size_t                          dst_nents;
        unsigned int                    total;
        unsigned int                    count;
        dma_addr_t                      addr_in;
--- a/drivers/crypto/rockchip/rk3288_crypto_ablkcipher.c
+++ b/drivers/crypto/rockchip/rk3288_crypto_ablkcipher.c
@@ -260,8 +260,9 @@ static int rk_ablk_start(struct rk_crypt
        dev->total = req->nbytes;
        dev->sg_src = req->src;
        dev->first = req->src;
-       dev->nents = sg_nents(req->src);
+       dev->src_nents = sg_nents(req->src);
        dev->sg_dst = req->dst;
+       dev->dst_nents = sg_nents(req->dst);
        dev->aligned = 1;
 
        spin_lock_irqsave(&dev->lock, flags);
@@ -297,7 +298,7 @@ static int rk_ablk_rx(struct rk_crypto_i
 
        dev->unload_data(dev);
        if (!dev->aligned) {
-               if (!sg_pcopy_from_buffer(req->dst, dev->nents,
+               if (!sg_pcopy_from_buffer(req->dst, dev->dst_nents,
                                          dev->addr_vir, dev->count,
                                          dev->total - dev->left_bytes -
                                          dev->count)) {
--- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c
+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c
@@ -206,7 +206,7 @@ static int rk_ahash_start(struct rk_cryp
        dev->sg_dst = NULL;
        dev->sg_src = req->src;
        dev->first = req->src;
-       dev->nents = sg_nents(req->src);
+       dev->src_nents = sg_nents(req->src);
        rctx = ahash_request_ctx(req);
        rctx->mode = 0;
 


Reply via email to