diff options
Diffstat (limited to 'drivers/usb/core/devio.c')
| -rw-r--r-- | drivers/usb/core/devio.c | 16 | 
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index 737e3c19967..71dc5d768fa 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c @@ -742,6 +742,22 @@ static int check_ctrlrecip(struct dev_state *ps, unsigned int requesttype,  		if ((index & ~USB_DIR_IN) == 0)  			return 0;  		ret = findintfep(ps->dev, index); +		if (ret < 0) { +			/* +			 * Some not fully compliant Win apps seem to get +			 * index wrong and have the endpoint number here +			 * rather than the endpoint address (with the +			 * correct direction). Win does let this through, +			 * so we'll not reject it here but leave it to +			 * the device to not break KVM. But we warn. +			 */ +			ret = findintfep(ps->dev, index ^ 0x80); +			if (ret >= 0) +				dev_info(&ps->dev->dev, +					"%s: process %i (%s) requesting ep %02x but needs %02x\n", +					__func__, task_pid_nr(current), +					current->comm, index, index ^ 0x80); +		}  		if (ret >= 0)  			ret = checkintf(ps, ret);  		break;  | 
