mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
usb: iowarrior: remove inherent race with minor number
[ Upstream commit56dd29088c] The driver saves the minor number it gets upon registration in its descriptor for debugging purposes. However, there is inevitably a window between registration and saving the correct minor in a descriptor. During this window the debugging output will be wrong. As wrong debug output is worse than no debug output, just remove it. Signed-off-by: Oliver Neukum <oneukum@suse.com> Link: https://patch.msgid.link/20260312094619.1590556-1-oneukum@suse.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Stable-dep-of:c602254ba4("USB: iowarrior: fix use-after-free on disconnect race") Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
ec662a8b2c
commit
6be54e2c8e
@@ -74,7 +74,6 @@ struct iowarrior {
|
||||
struct mutex mutex; /* locks this structure */
|
||||
struct usb_device *udev; /* save off the usb device pointer */
|
||||
struct usb_interface *interface; /* the interface for this device */
|
||||
unsigned char minor; /* the starting minor number for this device */
|
||||
struct usb_endpoint_descriptor *int_out_endpoint; /* endpoint for reading (needed for IOW56 only) */
|
||||
struct usb_endpoint_descriptor *int_in_endpoint; /* endpoint for reading */
|
||||
struct urb *int_in_urb; /* the urb for reading data */
|
||||
@@ -246,7 +245,6 @@ static void iowarrior_write_callback(struct urb *urb)
|
||||
*/
|
||||
static inline void iowarrior_delete(struct iowarrior *dev)
|
||||
{
|
||||
dev_dbg(&dev->interface->dev, "minor %d\n", dev->minor);
|
||||
kfree(dev->int_in_buffer);
|
||||
usb_free_urb(dev->int_in_urb);
|
||||
kfree(dev->read_queue);
|
||||
@@ -297,9 +295,6 @@ static ssize_t iowarrior_read(struct file *file, char __user *buffer,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
dev_dbg(&dev->interface->dev, "minor %d, count = %zd\n",
|
||||
dev->minor, count);
|
||||
|
||||
/* read count must be packet size (+ time stamp) */
|
||||
if ((count != dev->report_size)
|
||||
&& (count != (dev->report_size + 1))) {
|
||||
@@ -379,8 +374,6 @@ static ssize_t iowarrior_write(struct file *file,
|
||||
retval = -ENODEV;
|
||||
goto exit;
|
||||
}
|
||||
dev_dbg(&dev->interface->dev, "minor %d, count = %zd\n",
|
||||
dev->minor, count);
|
||||
/* if count is 0 we're already done */
|
||||
if (count == 0) {
|
||||
retval = 0;
|
||||
@@ -523,9 +516,6 @@ static long iowarrior_ioctl(struct file *file, unsigned int cmd,
|
||||
goto error_out;
|
||||
}
|
||||
|
||||
dev_dbg(&dev->interface->dev, "minor %d, cmd 0x%.4x, arg %ld\n",
|
||||
dev->minor, cmd, arg);
|
||||
|
||||
retval = 0;
|
||||
io_res = 0;
|
||||
switch (cmd) {
|
||||
@@ -672,8 +662,6 @@ static int iowarrior_release(struct inode *inode, struct file *file)
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
dev_dbg(&dev->interface->dev, "minor %d\n", dev->minor);
|
||||
|
||||
/* lock our device */
|
||||
mutex_lock(&dev->mutex);
|
||||
|
||||
@@ -776,6 +764,7 @@ static int iowarrior_probe(struct usb_interface *interface,
|
||||
struct usb_host_interface *iface_desc;
|
||||
int retval = -ENOMEM;
|
||||
int res;
|
||||
int minor;
|
||||
|
||||
/* allocate memory for our device state and initialize it */
|
||||
dev = kzalloc(sizeof(struct iowarrior), GFP_KERNEL);
|
||||
@@ -891,12 +880,12 @@ static int iowarrior_probe(struct usb_interface *interface,
|
||||
goto error;
|
||||
}
|
||||
|
||||
dev->minor = interface->minor;
|
||||
minor = interface->minor;
|
||||
|
||||
/* let the user know what node this device is now attached to */
|
||||
dev_info(&interface->dev, "IOWarrior product=0x%x, serial=%s interface=%d "
|
||||
"now attached to iowarrior%d\n", dev->product_id, dev->chip_serial,
|
||||
iface_desc->desc.bInterfaceNumber, dev->minor - IOWARRIOR_MINOR_BASE);
|
||||
iface_desc->desc.bInterfaceNumber, minor - IOWARRIOR_MINOR_BASE);
|
||||
return retval;
|
||||
|
||||
error:
|
||||
|
||||
Reference in New Issue
Block a user