Message ID | 20200526142104.7362-1-t-kristo@ti.com (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Herbert Xu |
Headers | show |
Series | None | expand |
On Tue, May 26, 2020 at 05:21:04PM +0300, Tero Kristo wrote: > 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> > --- > v3: > - Added PageSlab() check to the cache flushing portion, and changed > the used flush API to be flush_kernel_dcache_page() > > drivers/crypto/omap-crypto.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) Please resubmit the whole series. Thanks,
diff --git a/drivers/crypto/omap-crypto.c b/drivers/crypto/omap-crypto.c index cc88b7362bc2..94b2dba90f0d 100644 --- a/drivers/crypto/omap-crypto.c +++ b/drivers/crypto/omap-crypto.c @@ -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;
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> --- v3: - Added PageSlab() check to the cache flushing portion, and changed the used flush API to be flush_kernel_dcache_page() drivers/crypto/omap-crypto.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)