Commit 0cb68669 authored by Bastien Nocera's avatar Bastien Nocera Committed by Greg Kroah-Hartman

USB: apple-mfi-fastcharge: don't probe unhandled devices

From: Bastien Nocera <hadess@hadess.net>

Contrary to the comment above the id table, we didn't implement a match
function. This meant that every single Apple device that was already
plugged in to the computer would have its device driver reprobed
when the apple-mfi-fastcharge driver was loaded, eg. the SD card reader
could be reprobed when the apple-mfi-fastcharge after pivoting root
during boot up and the module became available.

Make sure that the driver probe isn't being run for unsupported
devices by adding a match function that checks the product ID, in
addition to the id_table checking the vendor ID.

Link: https://bugzilla.redhat.com/show_bug.cgi?id=1878347
Link: https://lore.kernel.org/linux-usb/CAE3RAxt0WhBEz8zkHrVO5RiyEOasayy1QUAjsv-pB0fAbY1GSw@mail.gmail.com/
Fixes: 249fa821 ("USB: Add driver to control USB fast charge for iOS devices")
Cc: <stable@vger.kernel.org> # 5.8
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
[m.v.b: Add Link and Reported-by tags to the commit message]
Reported-by: default avatarPany <pany@fedoraproject.org>
Tested-by: default avatarPan (Pany) YUAN <pany@fedoraproject.org>
Tested-by: default avatarBastien Nocera <hadess@hadess.net>
Signed-off-by: default avatarBastien Nocera <hadess@hadess.net>
Signed-off-by: default avatarM. Vefa Bicakci <m.v.b@runbox.com>
Link: https://lore.kernel.org/r/20201022135521.375211-3-m.v.b@runbox.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 0942d59b
...@@ -163,17 +163,23 @@ static const struct power_supply_desc apple_mfi_fc_desc = { ...@@ -163,17 +163,23 @@ static const struct power_supply_desc apple_mfi_fc_desc = {
.property_is_writeable = apple_mfi_fc_property_is_writeable .property_is_writeable = apple_mfi_fc_property_is_writeable
}; };
static bool mfi_fc_match(struct usb_device *udev)
{
int idProduct;
idProduct = le16_to_cpu(udev->descriptor.idProduct);
/* See comment above mfi_fc_id_table[] */
return (idProduct >= 0x1200 && idProduct <= 0x12ff);
}
static int mfi_fc_probe(struct usb_device *udev) static int mfi_fc_probe(struct usb_device *udev)
{ {
struct power_supply_config battery_cfg = {}; struct power_supply_config battery_cfg = {};
struct mfi_device *mfi = NULL; struct mfi_device *mfi = NULL;
int err, idProduct; int err;
idProduct = le16_to_cpu(udev->descriptor.idProduct); if (!mfi_fc_match(udev))
/* See comment above mfi_fc_id_table[] */
if (idProduct < 0x1200 || idProduct > 0x12ff) {
return -ENODEV; return -ENODEV;
}
mfi = kzalloc(sizeof(struct mfi_device), GFP_KERNEL); mfi = kzalloc(sizeof(struct mfi_device), GFP_KERNEL);
if (!mfi) { if (!mfi) {
...@@ -220,6 +226,7 @@ static struct usb_device_driver mfi_fc_driver = { ...@@ -220,6 +226,7 @@ static struct usb_device_driver mfi_fc_driver = {
.probe = mfi_fc_probe, .probe = mfi_fc_probe,
.disconnect = mfi_fc_disconnect, .disconnect = mfi_fc_disconnect,
.id_table = mfi_fc_id_table, .id_table = mfi_fc_id_table,
.match = mfi_fc_match,
.generic_subclass = 1, .generic_subclass = 1,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment