crypto: omap-crypto - fix userspace copied buffer access
[linux-2.6-microblaze.git] / drivers / crypto / omap-crypto.c
index cc88b73..94b2dba 100644 (file)
@@ -178,11 +178,17 @@ 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);
 
+               if (!PageSlab(sg_page(dst)))
+                       flush_kernel_dcache_page(sg_page(dst));
+
+               kunmap_atomic(srcb);
+               kunmap_atomic(dstb);
+
                srco += amt;
                dsto += amt;
                len -= amt;