Message ID | Z9dyY7_ydJiGqh_d@kspp (mailing list archive) |
---|---|
State | In Next |
Commit | 24454a11dd1551cd202a46a6fd69c65a1a368903 |
Headers | show |
Series | [next] usb: gadget: uvc: Avoid -Wflex-array-member-not-at-end warnings | expand |
On Mon, Mar 17, 2025 at 11:22:51AM +1030, Gustavo A. R. Silva wrote: > -Wflex-array-member-not-at-end was introduced in GCC-14, and we are > getting ready to enable it, globally. > > Move the conflicting declaration to the end of the structure. Notice > that `struct uvc_input_header_descriptor` is a flexible structure --a > structure that contains a flexible-array member. > > With this, fix three of the following warnings: > > drivers/usb/gadget/function/uvc_configfs.h:77:57: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] > > Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org> > --- > drivers/usb/gadget/function/uvc_configfs.h | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/gadget/function/uvc_configfs.h b/drivers/usb/gadget/function/uvc_configfs.h > index 2f78cd4f396f..9391614135e9 100644 > --- a/drivers/usb/gadget/function/uvc_configfs.h > +++ b/drivers/usb/gadget/function/uvc_configfs.h > @@ -74,10 +74,12 @@ static inline struct uvcg_format *to_uvcg_format(struct config_item *item) > > struct uvcg_streaming_header { > struct config_item item; > - struct uvc_input_header_descriptor desc; > unsigned linked; > struct list_head formats; > unsigned num_fmt; > + > + /* Must be last --ends in a flexible-array member. */ > + struct uvc_input_header_descriptor desc; > }; > > static inline struct uvcg_streaming_header *to_uvcg_streaming_header(struct config_item *item) This looks correct to me, and may be fixing some bugs -- I can see the allocation routine for this is already expecting the bmaControls (in desc) to be trailing: /* bmaControls */ *size += h->num_fmt * UVCG_STREAMING_CONTROL_SIZE; Reviewed-by: Kees Cook <kees@kernel.org>
diff --git a/drivers/usb/gadget/function/uvc_configfs.h b/drivers/usb/gadget/function/uvc_configfs.h index 2f78cd4f396f..9391614135e9 100644 --- a/drivers/usb/gadget/function/uvc_configfs.h +++ b/drivers/usb/gadget/function/uvc_configfs.h @@ -74,10 +74,12 @@ static inline struct uvcg_format *to_uvcg_format(struct config_item *item) struct uvcg_streaming_header { struct config_item item; - struct uvc_input_header_descriptor desc; unsigned linked; struct list_head formats; unsigned num_fmt; + + /* Must be last --ends in a flexible-array member. */ + struct uvc_input_header_descriptor desc; }; static inline struct uvcg_streaming_header *to_uvcg_streaming_header(struct config_item *item)
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally. Move the conflicting declaration to the end of the structure. Notice that `struct uvc_input_header_descriptor` is a flexible structure --a structure that contains a flexible-array member. With this, fix three of the following warnings: drivers/usb/gadget/function/uvc_configfs.h:77:57: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org> --- drivers/usb/gadget/function/uvc_configfs.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)