From: Marek Vasut Date: Sun, 9 Jun 2024 21:32:18 +0000 (+0200) Subject: usb: gadget: Add full ep_matches() check past .match_ep() callback X-Git-Url: http://git.dujemihanovic.xyz/login.html?a=commitdiff_plain;h=bd7ec7b04f877b8b4a88d4367f100dc3f0af27a3;p=u-boot.git usb: gadget: Add full ep_matches() check past .match_ep() callback If .match_ep() callback returns non-NULL endpoint, immediately check its usability and if the returned endpoint is usable, stop search and return the endpoint. Otherwise, continue with best effort search for usable endpoint. Currently the code would attempt the best effort search in any case, which may find another unexpected endpoint. It is likely that the intention of the original code was to stop the search early. Fixes: 77dcbdf3c1ce ("usb: gadget: Add match_ep() op to usb_gadget_ops") Signed-off-by: Marek Vasut Tested-by: Alexander Sverdlin Reviewed-by: Mattijs Korpershoek Tested-by: Mattijs Korpershoek # on vim3 Link: https://lore.kernel.org/r/20240609213449.194762-5-marek.vasut+renesas@mailbox.org Signed-off-by: Mattijs Korpershoek --- diff --git a/drivers/usb/gadget/epautoconf.c b/drivers/usb/gadget/epautoconf.c index 09950ceeae..66599ce8ef 100644 --- a/drivers/usb/gadget/epautoconf.c +++ b/drivers/usb/gadget/epautoconf.c @@ -247,8 +247,11 @@ struct usb_ep *usb_ep_autoconfig( return ep; } - if (gadget->ops->match_ep) + if (gadget->ops->match_ep) { ep = gadget->ops->match_ep(gadget, desc, NULL); + if (ep && ep_matches(gadget, ep, desc)) + return ep; + } /* Second, look at endpoints until an unclaimed one looks usable */ list_for_each_entry(ep, &gadget->ep_list, ep_list) {