Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Tero Kristo and committed by
Herbert Xu
7e34e0bb 8dc43636

+8 -2
+8 -2
drivers/crypto/omap-crypto.c
··· 178 178 amt = min(src->length - srco, dst->length - dsto); 179 179 amt = min(len, amt); 180 180 181 - srcb = sg_virt(src) + srco; 182 - dstb = sg_virt(dst) + dsto; 181 + srcb = kmap_atomic(sg_page(src)) + srco + src->offset; 182 + dstb = kmap_atomic(sg_page(dst)) + dsto + dst->offset; 183 183 184 184 memcpy(dstb, srcb, amt); 185 + 186 + if (!PageSlab(sg_page(dst))) 187 + flush_kernel_dcache_page(sg_page(dst)); 188 + 189 + kunmap_atomic(srcb); 190 + kunmap_atomic(dstb); 185 191 186 192 srco += amt; 187 193 dsto += amt;