Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: gadget: fsl: Initialize udc before using it

fsl_ep_queue() is only called by usb_ep_queue() (as ep->ops->queue()).
So _ep isn't NULL.

As ep->ops->queue = fsl_ep_queue, the ep was initialized by
struct_ep_setup() and so ep->udc isn't NULL either.

Drop the check for _ep being NULL and assign udc earlier to prevent
following an uninitialized pointer in the two dev_vdbg()s in lines 878
and 882. This fixes a compiler warning when using clang and
CONFIG_USB_GADGET_VERBOSE=y.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202404050227.TTvcCPBu-lkp@intel.com/
Fixes: 6025f20f16c2 ("usb: gadget: fsl-udc: Replace custom log wrappers by dev_{err,warn,dbg,vdbg}")
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Link: https://lore.kernel.org/r/20240405055812.694123-2-u.kleine-koenig@pengutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Uwe Kleine-König and committed by
Greg Kroah-Hartman
d464dac4 d920a2ed

+2 -3
+2 -3
drivers/usb/gadget/udc/fsl_udc_core.c
··· 868 868 { 869 869 struct fsl_ep *ep = container_of(_ep, struct fsl_ep, ep); 870 870 struct fsl_req *req = container_of(_req, struct fsl_req, req); 871 - struct fsl_udc *udc; 871 + struct fsl_udc *udc = ep->udc; 872 872 unsigned long flags; 873 873 int ret; 874 874 ··· 878 878 dev_vdbg(&udc->gadget.dev, "%s, bad params\n", __func__); 879 879 return -EINVAL; 880 880 } 881 - if (unlikely(!_ep || !ep->ep.desc)) { 881 + if (unlikely(!ep->ep.desc)) { 882 882 dev_vdbg(&udc->gadget.dev, "%s, bad ep\n", __func__); 883 883 return -EINVAL; 884 884 } ··· 887 887 return -EMSGSIZE; 888 888 } 889 889 890 - udc = ep->udc; 891 890 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) 892 891 return -ESHUTDOWN; 893 892