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 737e3c19967b..71dc5d768fa5 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, | |||
742 | if ((index & ~USB_DIR_IN) == 0) | 742 | if ((index & ~USB_DIR_IN) == 0) |
743 | return 0; | 743 | return 0; |
744 | ret = findintfep(ps->dev, index); | 744 | ret = findintfep(ps->dev, index); |
745 | if (ret < 0) { | ||
746 | /* | ||
747 | * Some not fully compliant Win apps seem to get | ||
748 | * index wrong and have the endpoint number here | ||
749 | * rather than the endpoint address (with the | ||
750 | * correct direction). Win does let this through, | ||
751 | * so we'll not reject it here but leave it to | ||
752 | * the device to not break KVM. But we warn. | ||
753 | */ | ||
754 | ret = findintfep(ps->dev, index ^ 0x80); | ||
755 | if (ret >= 0) | ||
756 | dev_info(&ps->dev->dev, | ||
757 | "%s: process %i (%s) requesting ep %02x but needs %02x\n", | ||
758 | __func__, task_pid_nr(current), | ||
759 | current->comm, index, index ^ 0x80); | ||
760 | } | ||
745 | if (ret >= 0) | 761 | if (ret >= 0) |
746 | ret = checkintf(ps, ret); | 762 | ret = checkintf(ps, ret); |
747 | break; | 763 | break; |