In case buffers are copied from userspace, directly accessing the page
will most likely fail because it hasn't been mapped into the kernel
memory space. Fix the issue by forcing a kmap / kunmap within the
cleanup functionality.

Signed-off-by: Tero Kristo <t-kri...@ti.com>
---
 drivers/crypto/omap-crypto.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/crypto/omap-crypto.c b/drivers/crypto/omap-crypto.c
index cc88b7362bc2..cbc5a4151c3c 100644
--- a/drivers/crypto/omap-crypto.c
+++ b/drivers/crypto/omap-crypto.c
@@ -178,11 +178,14 @@ static void omap_crypto_copy_data(struct scatterlist *src,
                amt = min(src->length - srco, dst->length - dsto);
                amt = min(len, amt);
 
-               srcb = sg_virt(src) + srco;
-               dstb = sg_virt(dst) + dsto;
+               srcb = kmap_atomic(sg_page(src)) + srco + src->offset;
+               dstb = kmap_atomic(sg_page(dst)) + dsto + dst->offset;
 
                memcpy(dstb, srcb, amt);
 
+               kunmap_atomic(srcb);
+               kunmap_atomic(dstb);
+
                srco += amt;
                dsto += amt;
                len -= amt;
-- 
2.17.1

--
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. 
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

Reply via email to