]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
usb: iowarrior: remove inherent race with minor number
authorOliver Neukum <oneukum@suse.com>
Thu, 12 Mar 2026 09:45:27 +0000 (10:45 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Mar 2026 15:02:17 +0000 (16:02 +0100)
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>
drivers/usb/misc/iowarrior.c

index 18670dfed2e7df3cc4246e322355a7b209f2be41..5b31e5669d5307e9a2a53ff5df32d93337ca6421 100644 (file)
@@ -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;
        switch (cmd) {
        case IOW_WRITE:
@@ -671,8 +661,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);
 
@@ -775,6 +763,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_obj(struct iowarrior);
@@ -890,12 +879,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: