Commit a40ec7be authored by Jun Yan's avatar Jun Yan Committed by Wen Zhiwei
Browse files

USB: usblp: return error when setting unsupported protocol

stable inclusion
from stable-v6.6.72
commit 77af0434807bce39b7f3361bb2961071840333d8
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IBQN9L

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=77af0434807bce39b7f3361bb2961071840333d8



--------------------------------

commit 7a3d76a0b60b3f6fc3375e4de2174bab43f64545 upstream.

Fix the regression introduced by commit d8c6edfa ("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: d8c6edfa ("USB: usblp: don't call usb_set_interface if there's a single alt")
Cc: stable <stable@kernel.org>
Signed-off-by: default avatarJun Yan <jerrysteve1101@gmail.com>
Link: https://lore.kernel.org/r/20241212143852.671889-1-jerrysteve1101@gmail.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarWen Zhiwei <wenzhiwei@kylinos.cn>
parent beb287c1
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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;

	/* 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;

	/* Don't unnecessarily set the interface if there's a single alt. */
	if (usblp->intf->num_altsetting > 1) {
		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",