]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
USB: usblp: return error when setting unsupported protocol
authorJun Yan <jerrysteve1101@gmail.com>
Thu, 12 Dec 2024 14:38:52 +0000 (22:38 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 23 Dec 2024 17:50:41 +0000 (18:50 +0100)
Fix the regression introduced by commit d8c6edfa3f4e ("USB:
usblp: don't call usb_set_interface if there's a single alt"),
which causes that unsupported protocols can also be set via
ioctl when the num_altsetting of the device is 1.

Move the check for protocol support to the earlier stage.

Fixes: d8c6edfa3f4e ("USB: usblp: don't call usb_set_interface if there's a single alt")
Cc: stable <stable@kernel.org>
Signed-off-by: Jun Yan <jerrysteve1101@gmail.com>
Link: https://lore.kernel.org/r/20241212143852.671889-1-jerrysteve1101@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/class/usblp.c

index 5a2e43331064ebce12bb15bd36766bbc41e3c6a2..ff1a941fd2ede44a9b9a37ce50cb62f1e6945247 100644 (file)
@@ -1337,11 +1337,12 @@ static int usblp_set_protocol(struct usblp *usblp, int protocol)
        if (protocol < USBLP_FIRST_PROTOCOL || protocol > USBLP_LAST_PROTOCOL)
                return -EINVAL;
 
+       alts = usblp->protocol[protocol].alt_setting;
+       if (alts < 0)
+               return -EINVAL;
+
        /* Don't unnecessarily set the interface if there's a single alt. */
        if (usblp->intf->num_altsetting > 1) {
-               alts = usblp->protocol[protocol].alt_setting;
-               if (alts < 0)
-                       return -EINVAL;
                r = usb_set_interface(usblp->dev, usblp->ifnum, alts);
                if (r < 0) {
                        printk(KERN_ERR "usblp: can't set desired altsetting %d on interface %d\n",