Merge tag 'for-v4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power...
[sfrench/cifs-2.6.git] / drivers / crypto / omap-des.c
index 3eedb03111ba9fa01cecf5b437168cb40c89a806..5691434ffb2d356f09a72a454824b6e263ad7692 100644 (file)
@@ -560,10 +560,12 @@ static int omap_des_copy_sgs(struct omap_des_dev *dd)
        sg_init_table(&dd->in_sgl, 1);
        sg_set_buf(&dd->in_sgl, buf_in, dd->total);
        dd->in_sg = &dd->in_sgl;
+       dd->in_sg_len = 1;
 
        sg_init_table(&dd->out_sgl, 1);
        sg_set_buf(&dd->out_sgl, buf_out, dd->total);
        dd->out_sg = &dd->out_sgl;
+       dd->out_sg_len = 1;
 
        return 0;
 }
@@ -595,6 +597,14 @@ static int omap_des_prepare_req(struct crypto_engine *engine,
        dd->in_sg = req->src;
        dd->out_sg = req->dst;
 
+       dd->in_sg_len = sg_nents_for_len(dd->in_sg, dd->total);
+       if (dd->in_sg_len < 0)
+               return dd->in_sg_len;
+
+       dd->out_sg_len = sg_nents_for_len(dd->out_sg, dd->total);
+       if (dd->out_sg_len < 0)
+               return dd->out_sg_len;
+
        if (omap_des_copy_needed(dd->in_sg) ||
            omap_des_copy_needed(dd->out_sg)) {
                if (omap_des_copy_sgs(dd))
@@ -604,10 +614,6 @@ static int omap_des_prepare_req(struct crypto_engine *engine,
                dd->sgs_copied = 0;
        }
 
-       dd->in_sg_len = scatterwalk_bytes_sglen(dd->in_sg, dd->total);
-       dd->out_sg_len = scatterwalk_bytes_sglen(dd->out_sg, dd->total);
-       BUG_ON(dd->in_sg_len < 0 || dd->out_sg_len < 0);
-
        rctx = ablkcipher_request_ctx(req);
        ctx = crypto_ablkcipher_ctx(crypto_ablkcipher_reqtfm(req));
        rctx->mode &= FLAGS_MODE_MASK;