mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
USB: make to_usb_device_driver() use container_of_const()
Turns out that we have some const pointers being passed to to_usb_device_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_driver_applicable() 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 Link: https://lore.kernel.org/r/2024111342-lagoon-reapprove-5e49@gregkh Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2f3aab7aec
commit
d6fa15bbcf
3 changed files with 4 additions and 5 deletions
|
@ -850,7 +850,7 @@ const struct usb_device_id *usb_device_match_id(struct usb_device *udev,
|
|||
EXPORT_SYMBOL_GPL(usb_device_match_id);
|
||||
|
||||
bool usb_driver_applicable(struct usb_device *udev,
|
||||
struct usb_device_driver *udrv)
|
||||
const struct usb_device_driver *udrv)
|
||||
{
|
||||
if (udrv->id_table && udrv->match)
|
||||
return usb_device_match_id(udev, udrv->id_table) != NULL &&
|
||||
|
@ -870,7 +870,7 @@ static int usb_device_match(struct device *dev, const struct device_driver *drv)
|
|||
/* devices and interfaces are handled separately */
|
||||
if (is_usb_device(dev)) {
|
||||
struct usb_device *udev;
|
||||
struct usb_device_driver *udrv;
|
||||
const struct usb_device_driver *udrv;
|
||||
|
||||
/* interface drivers never match devices */
|
||||
if (!is_usb_device_driver(drv))
|
||||
|
|
|
@ -75,7 +75,7 @@ extern int usb_match_device(struct usb_device *dev,
|
|||
extern const struct usb_device_id *usb_device_match_id(struct usb_device *udev,
|
||||
const struct usb_device_id *id);
|
||||
extern bool usb_driver_applicable(struct usb_device *udev,
|
||||
struct usb_device_driver *udrv);
|
||||
const struct usb_device_driver *udrv);
|
||||
extern void usb_forced_unbind_intf(struct usb_interface *intf);
|
||||
extern void usb_unbind_and_rebind_marked_interfaces(struct usb_device *udev);
|
||||
|
||||
|
|
|
@ -1294,8 +1294,7 @@ struct usb_device_driver {
|
|||
unsigned int supports_autosuspend:1;
|
||||
unsigned int generic_subclass:1;
|
||||
};
|
||||
#define to_usb_device_driver(d) container_of(d, struct usb_device_driver, \
|
||||
driver)
|
||||
#define to_usb_device_driver(d) container_of_const(d, struct usb_device_driver, driver)
|
||||
|
||||
/**
|
||||
* struct usb_class_driver - identifies a USB driver that wants to use the USB major number
|
||||
|
|
Loading…
Add table
Reference in a new issue