[media] v4l: vb2-dma-contig: fail if user ptr buffer is not correctly aligned
The DMA transfer must be aligned to a specific value. If userptr is not aligned to DMA requirements then unexpected corruptions of the memory may occur before or after a buffer. To prevent such situations, all unligned userptr buffers are rejected at VIDIOC_QBUF. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
67a5d0cebf
commit
d81e870d5a
1 changed files with 12 additions and 0 deletions
|
@ -491,6 +491,18 @@ static void *vb2_dc_get_userptr(void *alloc_ctx, unsigned long vaddr,
|
|||
struct vm_area_struct *vma;
|
||||
struct sg_table *sgt;
|
||||
unsigned long contig_size;
|
||||
unsigned long dma_align = dma_get_cache_alignment();
|
||||
|
||||
/* Only cache aligned DMA transfers are reliable */
|
||||
if (!IS_ALIGNED(vaddr | size, dma_align)) {
|
||||
pr_debug("user data must be aligned to %lu bytes\n", dma_align);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
if (!size) {
|
||||
pr_debug("size is zero\n");
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
buf = kzalloc(sizeof *buf, GFP_KERNEL);
|
||||
if (!buf)
|
||||
|
|
Loading…
Reference in a new issue