vb2: Allow queuing OUTPUT buffers with zeroed 'bytesused'

Message ID 1377532029-12777-1-git-send-email-s.nawrocki@samsung.com (mailing list archive)
State Accepted, archived
Delegated to: Sylwester Nawrocki
Headers

Commit Message

Sylwester Nawrocki Aug. 26, 2013, 3:47 p.m. UTC
  Modify the bytesused/data_offset check to not fail if both bytesused
and data_offset is set to 0. This should minimize possible issues in
existing applications which worked before we enforced the plane lengths
for output buffers checks introduced in commit 8023ed09cb278004a2
"videobuf2-core: Verify planes lengths for output buffers"

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 drivers/media/v4l2-core/videobuf2-core.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
  

Comments

Laurent Pinchart Aug. 27, 2013, 8:51 a.m. UTC | #1
Hi Sylwester,

Thank you for the patch.

On Monday 26 August 2013 17:47:09 Sylwester Nawrocki wrote:
> Modify the bytesused/data_offset check to not fail if both bytesused
> and data_offset is set to 0. This should minimize possible issues in
> existing applications which worked before we enforced the plane lengths
> for output buffers checks introduced in commit 8023ed09cb278004a2
> "videobuf2-core: Verify planes lengths for output buffers"
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>

Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  drivers/media/v4l2-core/videobuf2-core.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/media/v4l2-core/videobuf2-core.c
> b/drivers/media/v4l2-core/videobuf2-core.c index 594c75e..de0e87f 100644
> --- a/drivers/media/v4l2-core/videobuf2-core.c
> +++ b/drivers/media/v4l2-core/videobuf2-core.c
> @@ -353,7 +353,9 @@ static int __verify_length(struct vb2_buffer *vb, const
> struct v4l2_buffer *b)
> 
>  			if (b->m.planes[plane].bytesused > length)
>  				return -EINVAL;
> -			if (b->m.planes[plane].data_offset >=
> +
> +			if (b->m.planes[plane].data_offset > 0 &&
> +			    b->m.planes[plane].data_offset >=
>  			    b->m.planes[plane].bytesused)
>  				return -EINVAL;
>  		}
  
Marek Szyprowski Aug. 27, 2013, 9 a.m. UTC | #2
Hello,

On 8/26/2013 5:47 PM, Sylwester Nawrocki wrote:
> Modify the bytesused/data_offset check to not fail if both bytesused
> and data_offset is set to 0. This should minimize possible issues in
> existing applications which worked before we enforced the plane lengths
> for output buffers checks introduced in commit 8023ed09cb278004a2
> "videobuf2-core: Verify planes lengths for output buffers"
>
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>

Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>

> ---
>   drivers/media/v4l2-core/videobuf2-core.c |    4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
> index 594c75e..de0e87f 100644
> --- a/drivers/media/v4l2-core/videobuf2-core.c
> +++ b/drivers/media/v4l2-core/videobuf2-core.c
> @@ -353,7 +353,9 @@ static int __verify_length(struct vb2_buffer *vb, const struct v4l2_buffer *b)
>   
>   			if (b->m.planes[plane].bytesused > length)
>   				return -EINVAL;
> -			if (b->m.planes[plane].data_offset >=
> +
> +			if (b->m.planes[plane].data_offset > 0 &&
> +			    b->m.planes[plane].data_offset >=
>   			    b->m.planes[plane].bytesused)
>   				return -EINVAL;
>   		}

Best regards
  

Patch

diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
index 594c75e..de0e87f 100644
--- a/drivers/media/v4l2-core/videobuf2-core.c
+++ b/drivers/media/v4l2-core/videobuf2-core.c
@@ -353,7 +353,9 @@  static int __verify_length(struct vb2_buffer *vb, const struct v4l2_buffer *b)
 
 			if (b->m.planes[plane].bytesused > length)
 				return -EINVAL;
-			if (b->m.planes[plane].data_offset >=
+
+			if (b->m.planes[plane].data_offset > 0 &&
+			    b->m.planes[plane].data_offset >=
 			    b->m.planes[plane].bytesused)
 				return -EINVAL;
 		}