mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
crypto: omap-crypto - fix userspace copied buffer access
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-kristo@ti.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
@@ -178,11 +178,17 @@ static void omap_crypto_copy_data(struct scatterlist *src,
|
|||||||
amt = min(src->length - srco, dst->length - dsto);
|
amt = min(src->length - srco, dst->length - dsto);
|
||||||
amt = min(len, amt);
|
amt = min(len, amt);
|
||||||
|
|
||||||
srcb = sg_virt(src) + srco;
|
srcb = kmap_atomic(sg_page(src)) + srco + src->offset;
|
||||||
dstb = sg_virt(dst) + dsto;
|
dstb = kmap_atomic(sg_page(dst)) + dsto + dst->offset;
|
||||||
|
|
||||||
memcpy(dstb, srcb, amt);
|
memcpy(dstb, srcb, amt);
|
||||||
|
|
||||||
|
if (!PageSlab(sg_page(dst)))
|
||||||
|
flush_kernel_dcache_page(sg_page(dst));
|
||||||
|
|
||||||
|
kunmap_atomic(srcb);
|
||||||
|
kunmap_atomic(dstb);
|
||||||
|
|
||||||
srco += amt;
|
srco += amt;
|
||||||
dsto += amt;
|
dsto += amt;
|
||||||
len -= amt;
|
len -= amt;
|
||||||
|
Reference in New Issue
Block a user