Message ID | 2024111339-shaky-goldsmith-b233@gregkh (mailing list archive) |
---|---|
State | Accepted |
Commit | 2f3aab7aecb827ba93c6222646eb0faa8228d590 |
Headers | show |
Series | [v2,1/2] USB: make to_usb_driver() use container_of_const() | expand |
Hi, On Wed, Nov 13, 2024 at 6:04 AM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > Turns out that we have some const pointers being passed to > to_usb_driver() but were not catching this. Change the macro to > properly propagate the const-ness of the pointer so that we will notice > when we try to write to memory that we shouldn't be writing to. > > This requires fixing up the usb_match_dynamic_id() function as well, > because it can handle a const * to struct usb_driver. > > Cc: Johan Hovold <johan@kernel.org> > Cc: Alan Stern <stern@rowland.harvard.edu> > Cc: Grant Grundler <grundler@chromium.org> > Cc: Yajun Deng <yajun.deng@linux.dev> > Cc: Oliver Neukum <oneukum@suse.com> > Cc: Douglas Anderson <dianders@chromium.org> > Cc: linux-usb@vger.kernel.org > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > --- > v2: reordered patches, goes on top of series submitted at https://lore.kernel.org/r/2024111322-kindly-finalist-d247@gregkh > > drivers/usb/core/driver.c | 4 ++-- > include/linux/usb.h | 2 +- > 2 files changed, 3 insertions(+), 3 deletions(-) This looks reasonable to me. Assuming that there are no compiler errors reported: Reviewed-by: Douglas Anderson <dianders@chromium.org>
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index 9ea955a3d115..bc5c561bdbd5 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c @@ -228,7 +228,7 @@ static void usb_free_dynids(struct usb_driver *usb_drv) } static const struct usb_device_id *usb_match_dynamic_id(struct usb_interface *intf, - struct usb_driver *drv) + const struct usb_driver *drv) { struct usb_dynid *dynid; @@ -890,7 +890,7 @@ static int usb_device_match(struct device *dev, const struct device_driver *drv) } else if (is_usb_interface(dev)) { struct usb_interface *intf; - struct usb_driver *usb_drv; + const struct usb_driver *usb_drv; const struct usb_device_id *id; /* device drivers never match interfaces */ diff --git a/include/linux/usb.h b/include/linux/usb.h index b66b1af3e439..7a9e96f9d886 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h @@ -1243,7 +1243,7 @@ struct usb_driver { unsigned int disable_hub_initiated_lpm:1; unsigned int soft_unbind:1; }; -#define to_usb_driver(d) container_of(d, struct usb_driver, driver) +#define to_usb_driver(d) container_of_const(d, struct usb_driver, driver) /** * struct usb_device_driver - identifies USB device driver to usbcore
Turns out that we have some const pointers being passed to to_usb_driver() but were not catching this. Change the macro to properly propagate the const-ness of the pointer so that we will notice when we try to write to memory that we shouldn't be writing to. This requires fixing up the usb_match_dynamic_id() function as well, because it can handle a const * to struct usb_driver. Cc: Johan Hovold <johan@kernel.org> Cc: Alan Stern <stern@rowland.harvard.edu> Cc: Grant Grundler <grundler@chromium.org> Cc: Yajun Deng <yajun.deng@linux.dev> Cc: Oliver Neukum <oneukum@suse.com> Cc: Douglas Anderson <dianders@chromium.org> Cc: linux-usb@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- v2: reordered patches, goes on top of series submitted at https://lore.kernel.org/r/2024111322-kindly-finalist-d247@gregkh drivers/usb/core/driver.c | 4 ++-- include/linux/usb.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)