diff options
author | Sylwester Nawrocki <s.nawrocki@samsung.com> | 2011-05-23 08:15:05 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-06-11 08:45:32 -0400 |
commit | a629f86b4aa1669ddf2afaa3ded66d5a59d60b77 (patch) | |
tree | db0bf2dae45373ef6d59dbaf82c676307b82e590 /drivers/media/video/s5p-fimc/fimc-core.c | |
parent | 3495dcefeb3b5ab825788206d5b696be14f4de19 (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/video/s5p-fimc/fimc-core.c')
-rw-r--r-- | drivers/media/video/s5p-fimc/fimc-core.c | 12 |
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 | ||