[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 4/7] usb-linux: Refuse packets for endpoints which a
From: |
Hans de Goede |
Subject: |
[Qemu-devel] [PATCH 4/7] usb-linux: Refuse packets for endpoints which are not in the usb descriptor |
Date: |
Fri, 26 Nov 2010 19:13:20 +0100 |
If an endpoint is not in the usb descriptor we've no idea what kind of
endpoint it is and thus how to handle it, refuse packages in this case.
Signed-off-by: Hans de Goede <address@hidden>
---
usb-linux.c | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/usb-linux.c b/usb-linux.c
index 96aa1ed..8513ace 100644
--- a/usb-linux.c
+++ b/usb-linux.c
@@ -94,6 +94,7 @@ static int usb_fs_type;
/* endpoint association data */
#define ISO_FRAME_DESC_PER_URB 32
#define ISO_URB_COUNT 3
+#define INVALID_EP_TYPE 255
typedef struct AsyncURB AsyncURB;
@@ -168,6 +169,11 @@ static int is_isoc(USBHostDevice *s, int ep)
return s->endp_table[ep - 1].type == USBDEVFS_URB_TYPE_ISO;
}
+static int is_valid(USBHostDevice *s, int ep)
+{
+ return s->endp_table[ep - 1].type != INVALID_EP_TYPE;
+}
+
static int is_halted(USBHostDevice *s, int ep)
{
return s->endp_table[ep - 1].halted;
@@ -610,6 +616,10 @@ static int usb_host_handle_data(USBHostDevice *s,
USBPacket *p)
int ret;
uint8_t ep;
+ if (!is_valid(s, p->devep)) {
+ return USB_RET_NAK;
+ }
+
if (p->pid == USB_TOKEN_IN) {
ep = p->devep | 0x80;
} else {
@@ -1070,6 +1080,9 @@ static int usb_linux_update_endp_table(USBHostDevice *s)
uint8_t devep, type, configuration, alt_interface;
int interface, length, i;
+ for (i = 0; i < MAX_ENDPOINTS; i++)
+ s->endp_table[i].type = INVALID_EP_TYPE;
+
i = usb_linux_get_configuration(s);
if (i < 0)
return 1;
--
1.7.3.2
- [Qemu-devel] [PATCH 1/7] usb-linux: introduce a usb_linux_alt_setting function, Hans de Goede, 2010/11/26
- [Qemu-devel] [PATCH 2/7] usb-linux: Get the alt. setting from sysfs rather then asking the dev, Hans de Goede, 2010/11/26
- [Qemu-devel] [PATCH 3/7] usb-linux: Add support for buffering iso usb packets, Hans de Goede, 2010/11/26
- [Qemu-devel] [PATCH 4/7] usb-linux: Refuse packets for endpoints which are not in the usb descriptor,
Hans de Goede <=
- [Qemu-devel] [PATCH 5/7] usb-linux: Refuse iso packets when max packet size is 0 (alt setting 0), Hans de Goede, 2010/11/26
- [Qemu-devel] [PATCH 6/7] usb-linux: We only need to keep track of 15 endpoints, Hans de Goede, 2010/11/26
- [Qemu-devel] [PATCH 7/7] usb-linux: Add support for buffering iso out usb packets, Hans de Goede, 2010/11/26