aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2011-05-23 08:15:05 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-06-11 08:45:32 -0400
commita629f86b4aa1669ddf2afaa3ded66d5a59d60b77 (patch)
treedb0bf2dae45373ef6d59dbaf82c676307b82e590 /drivers/media
parent3495dcefeb3b5ab825788206d5b696be14f4de19 (diff)
[media] s5p-fimc: Fix wrong buffer size in queue_setup
Avoid dereferencing of NULL f->fmt. Correct size of the allocated buffer in case the crop rectangle is smaller than the bounds rectangle (configured with S_FMT). Also remove redundant check for *num_buffer == 0 as this case is handled in videobuf2. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/s5p-fimc/fimc-core.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/media/video/s5p-fimc/fimc-core.c b/drivers/media/video/s5p-fimc/fimc-core.c
index c427edd3cd5e..85b47a328a5d 100644
--- a/drivers/media/video/s5p-fimc/fimc-core.c
+++ b/drivers/media/video/s5p-fimc/fimc-core.c
@@ -704,22 +704,18 @@ static int fimc_queue_setup(struct vb2_queue *vq, unsigned int *num_buffers,
704 f = ctx_get_frame(ctx, vq->type); 704 f = ctx_get_frame(ctx, vq->type);
705 if (IS_ERR(f)) 705 if (IS_ERR(f))
706 return PTR_ERR(f); 706 return PTR_ERR(f);
707
708 /* 707 /*
709 * Return number of non-contigous planes (plane buffers) 708 * Return number of non-contigous planes (plane buffers)
710 * depending on the configured color format. 709 * depending on the configured color format.
711 */ 710 */
712 if (f->fmt) 711 if (!f->fmt)
713 *num_planes = f->fmt->memplanes; 712 return -EINVAL;
714 713
714 *num_planes = f->fmt->memplanes;
715 for (i = 0; i < f->fmt->memplanes; i++) { 715 for (i = 0; i < f->fmt->memplanes; i++) {
716 sizes[i] = (f->width * f->height * f->fmt->depth[i]) >> 3; 716 sizes[i] = (f->f_width * f->f_height * f->fmt->depth[i]) / 8;
717 allocators[i] = ctx->fimc_dev->alloc_ctx; 717 allocators[i] = ctx->fimc_dev->alloc_ctx;
718 } 718 }
719
720 if (*num_buffers == 0)
721 *num_buffers = 1;
722
723 return 0; 719 return 0;
724} 720}
725 721