From: "M. Vefa Bicakci" <m.v.b@runbox.com>
To: Bastien Nocera <hadess@hadess.net>, linux-usb@vger.kernel.org
Cc: Andrey Konovalov <andreyknvl@google.com>,
stable@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Alan Stern <stern@rowland.harvard.edu>,
syzkaller@googlegroups.com
Subject: Re: [PATCH 1/2] usbcore/driver: Fix specific driver selection
Date: Thu, 17 Sep 2020 13:39:26 +0300 [thread overview]
Message-ID: <0ce9fcb5-8684-cf5c-e8ad-02217848cbe7@runbox.com> (raw)
In-Reply-To: <2ee0f3922f54888acf3e0cafa47c3829a9b0de8f.camel@hadess.net>
On 17/09/2020 13.23, Bastien Nocera wrote:
> On Thu, 2020-09-17 at 12:59 +0300, M. Vefa Bicakci wrote:
>> This commit resolves two minor bugs in the selection/discovery of
>> more
>> specific USB device drivers for devices that are currently bound to
>> generic USB device drivers.
>>
>> The first bug is related to the way a candidate USB device driver is
>> compared against the generic USB device driver. The code in
>> is_dev_usb_generic_driver() used to unconditionally use
>> to_usb_device_driver() on each device driver, without verifying that
>> the device driver in question is a USB device driver (as opposed to a
>> USB interface driver).
>
> You could also return early if is_usb_device() fails in
> __usb_bus_reprobe_drivers(). Each of the interface and the device
> itself is a separate "struct device", and "non-interface" devices won't
> have interface devices assigned to them.
Will do! If I understand you correctly, you mean something like the
following:
static int __usb_bus_reprobe_drivers(struct device *dev, void *data)
{
struct usb_device_driver *new_udriver = data;
struct usb_device *udev;
int ret;
/* Proposed addition begins */
if (!is_usb_device(dev))
return 0;
/* Proposed addition ends */
if (!is_dev_usb_generic_driver(dev))
return 0;
>> The second bug is related to the logic that determines whether a
>> device
>> currently bound to a generic USB device driver should be re-probed by
>> a
>> more specific USB device driver or not. The code in
>> __usb_bus_reprobe_drivers() used to have the following lines:
>>
>> if (usb_device_match_id(udev, new_udriver->id_table) == NULL &&
>> (!new_udriver->match || new_udriver->match(udev) != 0))
>> return 0;
>>
>> ret = device_reprobe(dev);
>>
>> As the reader will notice, the code checks whether the USB device in
>> consideration matches the identifier table (id_table) of a specific
>> USB device_driver (new_udriver), followed by a similar check, but
>> this
>> time with the USB device driver's match function. However, the match
>> function's return value is not checked correctly. When match()
>> returns
>> zero, it means that the specific USB device driver is *not*
>> applicable
>> to the USB device in question, but the code then goes on to reprobe
>> the
>> device with the new USB device driver under consideration. All this
>> to
>> say, the logic is inverted.
>
> Could you split that change as the first commit in your patchset?
Of course!
> I'll test your patches locally once you've respun them. Thanks for
> working on this.
>
> Cheers
Thank you for reviewing the patches! I intend to address your comments,
test the patches and publish them soon (i.e., likely within a few hours).
Thank you,
Vefa
next prev parent reply other threads:[~2020-09-17 10:39 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-16 13:33 USB driver ID matching broken Andrey Konovalov
2020-09-16 14:15 ` Greg Kroah-Hartman
2020-09-16 14:39 ` Bastien Nocera
2020-09-16 15:58 ` M. Vefa Bicakci
2020-09-17 9:59 ` [PATCH 1/2] usbcore/driver: Fix specific driver selection M. Vefa Bicakci
2020-09-17 9:59 ` [PATCH 2/2] usbip: Make the driver's match function specific M. Vefa Bicakci
2020-09-17 10:23 ` [PATCH 1/2] usbcore/driver: Fix specific driver selection Bastien Nocera
2020-09-17 10:39 ` M. Vefa Bicakci [this message]
2020-09-17 10:49 ` Bastien Nocera
2020-09-17 14:41 ` [PATCH 1/3] " M. Vefa Bicakci
2020-09-17 14:41 ` [PATCH 2/3] usbcore/driver: Fix incorrect downcast M. Vefa Bicakci
2020-09-17 15:01 ` Alan Stern
2020-09-18 9:26 ` M. Vefa Bicakci
2020-09-17 14:41 ` [PATCH 3/3] usbip: Make the driver's match function specific M. Vefa Bicakci
2020-09-17 15:21 ` Shuah Khan
2020-09-18 9:26 ` M. Vefa Bicakci
2020-09-18 14:31 ` M. Vefa Bicakci
2020-09-18 15:49 ` Shuah Khan
2020-09-19 13:54 ` M. Vefa Bicakci
2020-09-21 17:03 ` M. Vefa Bicakci
2020-09-18 14:31 ` [PATCH 1/3] usbcore/driver: Fix specific driver selection M. Vefa Bicakci
2020-09-18 14:52 ` Alan Stern
2020-09-19 13:52 ` M. Vefa Bicakci
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0ce9fcb5-8684-cf5c-e8ad-02217848cbe7@runbox.com \
--to=m.v.b@runbox.com \
--cc=andreyknvl@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=hadess@hadess.net \
--cc=linux-usb@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
--cc=syzkaller@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox