diff mbox series

[v2,8/8] usb: gadget: uvc: configfs: Prevent format changes after linking header

Message ID 20180801215505.7658-9-laurent.pinchart@ideasonboard.com (mailing list archive)
State New, archived
Headers show
Series usb: gadget: uvc: Improve configfs support | expand

Commit Message

Laurent Pinchart Aug. 1, 2018, 9:55 p.m. UTC
From: Joel Pepper <joel.pepper@rwth-aachen.de>

While checks are in place to avoid attributes and children of a format
being manipulated after the format is linked into the streaming header,
the linked flag was never actually set, invalidating the protections.

Signed-off-by: Joel Pepper <joel.pepper@rwth-aachen.de>
---
 drivers/usb/gadget/function/uvc_configfs.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Kieran Bingham Sept. 24, 2018, 12:50 p.m. UTC | #1
Hi Laurent, Joel,

On 01/08/18 22:55, Laurent Pinchart wrote:
> From: Joel Pepper <joel.pepper@rwth-aachen.de>
> 
> While checks are in place to avoid attributes and children of a format
> being manipulated after the format is linked into the streaming header,
> the linked flag was never actually set, invalidating the protections.

That explains what's wrong, but not what we do about it. How about adding:

"Update the flag as appropriate in the header link calls."

> 
> Signed-off-by: Joel Pepper <joel.pepper@rwth-aachen.de>

Missing and S-o-B from Laurent here? (I guess that will be added later?)

Otherwise,

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>



> ---
>  drivers/usb/gadget/function/uvc_configfs.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/usb/gadget/function/uvc_configfs.c b/drivers/usb/gadget/function/uvc_configfs.c
> index b8763343dcae..799dc32c5bc7 100644
> --- a/drivers/usb/gadget/function/uvc_configfs.c
> +++ b/drivers/usb/gadget/function/uvc_configfs.c
> @@ -928,6 +928,7 @@ static int uvcg_streaming_header_allow_link(struct config_item *src,
>  	format_ptr->fmt = target_fmt;
>  	list_add_tail(&format_ptr->entry, &src_hdr->formats);
>  	++src_hdr->num_fmt;
> +	++target_fmt->linked;
>  
>  out:
>  	mutex_unlock(&opts->lock);
> @@ -965,6 +966,8 @@ static void uvcg_streaming_header_drop_link(struct config_item *src,
>  			break;
>  		}
>  
> +	--target_fmt->linked;
> +
>  out:
>  	mutex_unlock(&opts->lock);
>  	mutex_unlock(su_mutex);
>
Laurent Pinchart Sept. 24, 2018, 4:03 p.m. UTC | #2
Hi Kieran,

On Monday, 24 September 2018 15:50:45 EEST Kieran Bingham wrote:
> On 01/08/18 22:55, Laurent Pinchart wrote:
> > From: Joel Pepper <joel.pepper@rwth-aachen.de>
> > 
> > While checks are in place to avoid attributes and children of a format
> > being manipulated after the format is linked into the streaming header,
> > the linked flag was never actually set, invalidating the protections.
> 
> That explains what's wrong, but not what we do about it. How about adding:
> 
> "Update the flag as appropriate in the header link calls."

Sounds good to me, I'll update that.

> > Signed-off-by: Joel Pepper <joel.pepper@rwth-aachen.de>
> 
> Missing and S-o-B from Laurent here? (I guess that will be added later?)

I haven't modified the patch, so haven't added my SoB to send it to the 
mailing list. I'll add it before issuing the pull request.

> Otherwise,
> 
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> 
> > ---
> > 
> >  drivers/usb/gadget/function/uvc_configfs.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/drivers/usb/gadget/function/uvc_configfs.c
> > b/drivers/usb/gadget/function/uvc_configfs.c index
> > b8763343dcae..799dc32c5bc7 100644
> > --- a/drivers/usb/gadget/function/uvc_configfs.c
> > +++ b/drivers/usb/gadget/function/uvc_configfs.c
> > @@ -928,6 +928,7 @@ static int uvcg_streaming_header_allow_link(struct
> > config_item *src,> 
> >  	format_ptr->fmt = target_fmt;
> >  	list_add_tail(&format_ptr->entry, &src_hdr->formats);
> >  	++src_hdr->num_fmt;
> > 
> > +	++target_fmt->linked;
> > 
> >  out:
> >  	mutex_unlock(&opts->lock);
> > 
> > @@ -965,6 +966,8 @@ static void uvcg_streaming_header_drop_link(struct
> > config_item *src,> 
> >  			break;
> >  		
> >  		}
> > 
> > +	--target_fmt->linked;
> > +
> > 
> >  out:
> >  	mutex_unlock(&opts->lock);
> >  	mutex_unlock(su_mutex);
diff mbox series

Patch

diff --git a/drivers/usb/gadget/function/uvc_configfs.c b/drivers/usb/gadget/function/uvc_configfs.c
index b8763343dcae..799dc32c5bc7 100644
--- a/drivers/usb/gadget/function/uvc_configfs.c
+++ b/drivers/usb/gadget/function/uvc_configfs.c
@@ -928,6 +928,7 @@  static int uvcg_streaming_header_allow_link(struct config_item *src,
 	format_ptr->fmt = target_fmt;
 	list_add_tail(&format_ptr->entry, &src_hdr->formats);
 	++src_hdr->num_fmt;
+	++target_fmt->linked;
 
 out:
 	mutex_unlock(&opts->lock);
@@ -965,6 +966,8 @@  static void uvcg_streaming_header_drop_link(struct config_item *src,
 			break;
 		}
 
+	--target_fmt->linked;
+
 out:
 	mutex_unlock(&opts->lock);
 	mutex_unlock(su_mutex);