Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp806348ioo; Sat, 21 May 2022 15:23:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyHhx6edrT5jHCKS1YhZbwQCKZjJK3T2skVmRpT/+iWDqATiisoxBnTVRjZR0dbK/iV3OhU X-Received: by 2002:aa7:cd70:0:b0:42a:f084:5fba with SMTP id ca16-20020aa7cd70000000b0042af0845fbamr17469935edb.351.1653171808320; Sat, 21 May 2022 15:23:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653171808; cv=none; d=google.com; s=arc-20160816; b=lXkcupAGGJzy1MiM+gNvI9RSwAmufHbPvFzR3puVq0nC7OflAbBCBRC6cHjPgcRXyt KwaJbMQesao8ffHSedV+BIZvM3nE8d7xUH57BSI3xi6PoIvxl2Qbdv2zWqL0OzOpcj2P 2QI6jPdr0MVi8rEfUAw6piEGIVIApWtQlG7UxWBVq5o/5w6TsiSMxJB6rqfOqOcH1gbf n8XL05qWvNftQSh2G7FMHbPqFRqBFl+mHdi2M2teQuJttKOCJFlvIfJ4hDswJoG3+H1s RkE2dquHwXzR3m9ng/jEQsURQ4TBjKPEpoZ1QnpOG8rXJvblkOrXgfF3P+2YRvC8vdHK 9r5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=FlZBjKSvnl7AO5/tg338EStcNW8RzWBsvwWR1QqvSkw=; b=ekh5v5qXuOHYHSlWKV/wHKZ5yTTlVKq38g+C0g0LtT+C7+qENU8vWUM+cxZWlTGikh bNU5xEvKAUN/8Hj8NQXKDiEoFKpY+bx/HSCWG7R3rRRnXlT80hxKfG1jR4GjJhwnlHb+ BNUwUhVcXw4J3XLBzlDXgUQXtraq6VHtdmFyKIQ1aG2tpvWnJH1wCTQ7aT7e1B8ZgtM5 W+y2Oc4mWk0ux493gXEoOjfWnzfsxAYpMO+nMH9M3c/mIDG+2t/aVLh2A8+XO9xiq4zu qCBPKflIDYNZpCf/hgM91JgsYqPsIDsLSGEBs5fFqMChdL8ObmNosC9KkSvaBy2XdZ6F rdXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Wu12qjr1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u9-20020a1709061da900b006e86e278dcesi137802ejh.766.2022.05.21.15.23.03; Sat, 21 May 2022 15:23:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Wu12qjr1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345078AbiETDdG (ORCPT + 99 others); Thu, 19 May 2022 23:33:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56034 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344034AbiETDdE (ORCPT ); Thu, 19 May 2022 23:33:04 -0400 Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1A123131284 for ; Thu, 19 May 2022 20:33:03 -0700 (PDT) Received: by mail-pj1-x102e.google.com with SMTP id w17-20020a17090a529100b001db302efed6so6833292pjh.4 for ; Thu, 19 May 2022 20:33:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=FlZBjKSvnl7AO5/tg338EStcNW8RzWBsvwWR1QqvSkw=; b=Wu12qjr1piexo1XuIyCC04c3/a9M0o+idnc7V3Lv6m1PZry+qW7XyarnNcLTduTpp8 mEGxyuUfZQuHOi+g41mZ2naQreRGxMMF1kZsL6UW8cMbneqMS2nqbZOtvKmcdiQ9ht4s 08RZ/MzeMzsnYcLWDObmbgxhTPv1GSE8OfJ3UstZQTATXs2SzlKTnB4R1czR77VU3sKa KF139nLQmZTN91r2S6U8neEr1Szx9oF1u8VW9wf3wIUCgTM2JW8FXSAqBys1L1yj949n esJunbZu1fF7Uc7uRVZzPj6YeyZA96rDCyNHgxl9MGsKxBvW6vtIGWNuxtHp3H5ybIQ1 RL/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=FlZBjKSvnl7AO5/tg338EStcNW8RzWBsvwWR1QqvSkw=; b=ytP4J4/dGg0kiEWzeCfvoHjTu1xTxkNcjLSL9WvQU2cLu7T1ENJDihaqKeJ0C7MdZn VeVqkdoUeiFcidet2Gfdzsc5SjlZZvAna/m4evXONtiDRkAVP+XaXm6JvbOVdw29YXH8 KpNjEJyE7oS1cVVhypWXfmhhcSRvAE9ijt0TSGQgNZAihjdXaDVhib7wuXngg/g5kSar u9hl9sGJZK2//TzriWSlSRdXUDKHEoFX2QuT15rEPl0naeE0A4/UUeFMcfgXojcmjFT/ N+tP9XriRdqiTLSBs/UTTvBpIOnVENED2kd2oqccueOUWdZ1Nk2wRhke/EbNFJ6yEN9i 6qWQ== X-Gm-Message-State: AOAM532ruoSQIZeVx8F7/UgClo/+7kkYJ0LNopnb0x7rPa2QoPC6ZbH6 iORH2uqQwVK5FKWvdYq7bu7cCXU1j3NiIl2FQg== X-Received: by 2002:a17:903:22c1:b0:161:d274:fb41 with SMTP id y1-20020a17090322c100b00161d274fb41mr7671742plg.31.1653017582589; Thu, 19 May 2022 20:33:02 -0700 (PDT) MIME-Version: 1.0 References: <20220514114819.2773691-1-zheyuma97@gmail.com> In-Reply-To: From: Zheyu Ma Date: Fri, 20 May 2022 11:32:51 +0800 Message-ID: Subject: Re: [PATCH v2] char: xillybus: Check endpoint type before allocing To: Greg KH Cc: eli.billauer@gmail.com, arnd@arndb.de, Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, May 14, 2022 at 9:32 PM Greg KH wrote: > > On Sat, May 14, 2022 at 07:48:19PM +0800, Zheyu Ma wrote: > > The driver submits bulk urb without checking the endpoint type is > > actually bulk. > > > > [ 3.108690] usb 1-1: BOGUS urb xfer, pipe 3 != type 1 > > [ 3.108983] WARNING: CPU: 0 PID: 211 at drivers/usb/core/urb.c:503 usb_submit_urb+0xcd9/0x18b0 > > [ 3.110976] RIP: 0010:usb_submit_urb+0xcd9/0x18b0 > > [ 3.115318] Call Trace: > > [ 3.115452] > > [ 3.115570] try_queue_bulk_in+0x43c/0x6e0 [xillyusb] > > [ 3.115838] xillyusb_probe+0x488/0x1230 [xillyusb] > > > > Add a check in endpoint_alloc() to fix the bug. > > > > Signed-off-by: Zheyu Ma > > --- > > Changes in v2: > > - Check the endpoint type at probe time > > --- > > drivers/char/xillybus/xillyusb.c | 27 ++++++++++++++++++++++++++- > > 1 file changed, 26 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/char/xillybus/xillyusb.c b/drivers/char/xillybus/xillyusb.c > > index dc3551796e5e..4467f13993ef 100644 > > --- a/drivers/char/xillybus/xillyusb.c > > +++ b/drivers/char/xillybus/xillyusb.c > > @@ -167,6 +167,7 @@ struct xillyusb_dev { > > struct device *dev; /* For dev_err() and such */ > > struct kref kref; > > struct workqueue_struct *workq; > > + struct usb_interface *intf; > > > > int error; > > spinlock_t error_lock; /* protect @error */ > > @@ -475,6 +476,25 @@ static void endpoint_dealloc(struct xillyusb_endpoint *ep) > > kfree(ep); > > } > > > > +static int xillyusb_check_endpoint(struct xillyusb_dev *xdev, u8 ep_num) > > +{ > > + struct usb_host_interface *if_desc = xdev->intf->altsetting; > > + int i; > > + > > + for (i = 0; i < if_desc->desc.bNumEndpoints; i++) { > > + struct usb_endpoint_descriptor *ep = &if_desc->endpoint[i].desc; > > + > > + if (ep->bEndpointAddress != ep_num) > > + continue; > > + > > + if ((usb_pipein(ep_num) && usb_endpoint_is_bulk_in(ep)) || > > + (usb_pipeout(ep_num) && usb_endpoint_is_bulk_out(ep))) > > + return 0; > > + } > > Why not use the built-in usb core functions that do this for you instead > of hand-parsing this? Look at usb_find_common_endpoints() and related > functions, that should make this much easier. Thanks for your reminder. But in this driver, we have to check not only the type and direction of the endpoint, but also the address of it. And the endpoint's address is sometimes dynamic. For example, in the function xillyusb_open(): out_ep = endpoint_alloc(xdev, (chan->chan_idx + 2) | USB_DIR_OUT, bulk_out_work, BUF_SIZE_ORDER, BUFNUM); However, usb_find_common_endpoints() can only find the first endpoint that satisfies the condition, not on a specific address. I cannot find a more suitable built-in core function, please correct me if I'm wrong. Thanks, Zheyu Ma