[PATCH] media: uvcvideo: Fix event flags in uvc_ctrl_send_events

Ricardo Ribalda posted 1 patch 1 week, 1 day ago
drivers/media/usb/uvc/uvc_ctrl.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] media: uvcvideo: Fix event flags in uvc_ctrl_send_events
Posted by Ricardo Ribalda 1 week, 1 day ago
If there is an event that needs the V4L2_EVENT_CTRL_CH_FLAGS flag, all
the following events will have that flag, regardless if they need it or
not.

This is because we keep using the same variable all the time and we do
not reset its original value.

Cc: stable@vger.kernel.org
Fixes: 805e9b4a06bf ("[media] uvcvideo: Send control change events for slave ctrls when the master changes")
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
---
 drivers/media/usb/uvc/uvc_ctrl.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index e59a463c2761..5314e7864c49 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -1626,13 +1626,13 @@ static void uvc_ctrl_send_events(struct uvc_fh *handle,
 {
 	struct uvc_control_mapping *mapping;
 	struct uvc_control *ctrl;
-	u32 changes = V4L2_EVENT_CTRL_CH_VALUE;
 	unsigned int i;
 	unsigned int j;
 
 	for (i = 0; i < xctrls_count; ++i) {
-		ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping);
+		u32 changes = V4L2_EVENT_CTRL_CH_VALUE;
 
+		ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping);
 		if (ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS)
 			/* Notification will be sent from an Interrupt event. */
 			continue;

---
base-commit: b14257abe7057def6127f6fb2f14f9adc8acabdb
change-id: 20241114-uvc-fix-event-272df1585bb3

Best regards,
-- 
Ricardo Ribalda <ribalda@chromium.org>
Re: [PATCH] media: uvcvideo: Fix event flags in uvc_ctrl_send_events
Posted by Laurent Pinchart 1 week ago
Hi Ricardo,

Thank you for the patch.

On Thu, Nov 14, 2024 at 12:17:51PM +0000, Ricardo Ribalda wrote:
> If there is an event that needs the V4L2_EVENT_CTRL_CH_FLAGS flag, all
> the following events will have that flag, regardless if they need it or
> not.
> 
> This is because we keep using the same variable all the time and we do
> not reset its original value.
> 
> Cc: stable@vger.kernel.org
> Fixes: 805e9b4a06bf ("[media] uvcvideo: Send control change events for slave ctrls when the master changes")
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>

Good catch.

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

> ---
>  drivers/media/usb/uvc/uvc_ctrl.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
> index e59a463c2761..5314e7864c49 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -1626,13 +1626,13 @@ static void uvc_ctrl_send_events(struct uvc_fh *handle,
>  {
>  	struct uvc_control_mapping *mapping;
>  	struct uvc_control *ctrl;
> -	u32 changes = V4L2_EVENT_CTRL_CH_VALUE;
>  	unsigned int i;
>  	unsigned int j;
>  
>  	for (i = 0; i < xctrls_count; ++i) {
> -		ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping);
> +		u32 changes = V4L2_EVENT_CTRL_CH_VALUE;
>  
> +		ctrl = uvc_find_control(handle->chain, xctrls[i].id, &mapping);
>  		if (ctrl->info.flags & UVC_CTRL_FLAG_ASYNCHRONOUS)
>  			/* Notification will be sent from an Interrupt event. */
>  			continue;
> 
> ---
> base-commit: b14257abe7057def6127f6fb2f14f9adc8acabdb
> change-id: 20241114-uvc-fix-event-272df1585bb3

-- 
Regards,

Laurent Pinchart