[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/14] usb-linux: Refuse packets for endpoints which
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 04/14] usb-linux: Refuse packets for endpoints which are not in the usb descriptor |
Date: |
Wed, 4 May 2011 17:41:38 +0200 |
From: Hans de Goede <address@hidden>
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>
Signed-off-by: Gerd Hoffmann <address@hidden>
---
usb-linux.c | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/usb-linux.c b/usb-linux.c
index a68603d..6aef7a5 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;
@@ -611,6 +617,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 {
@@ -1071,6 +1081,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.1
- [Qemu-devel] [PULL] usb patch queue, Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 01/14] usb-linux: introduce a usb_linux_alt_setting function, Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 02/14] usb-linux: Get the alt. setting from sysfs rather then asking the dev, Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 07/14] usb-linux: Add support for buffering iso out usb packets, Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 03/14] usb-linux: Add support for buffering iso usb packets, Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 11/14] ohci: get ohci state via container_of(), Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 06/14] usb-linux: We only need to keep track of 15 endpoints, Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 04/14] usb-linux: Refuse packets for endpoints which are not in the usb descriptor,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 05/14] usb-linux: Refuse iso packets when max packet size is 0 (alt setting 0), Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 10/14] uhci: keep uhci state pointer in async packet struct., Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 08/14] usb: control buffer fixes, Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 12/14] musb: get musb state via container_of(), Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 14/14] usb: mass storage fix, Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 13/14] usb: move complete callback to port ops, Gerd Hoffmann, 2011/05/04
- [Qemu-devel] [PATCH 09/14] uhci: switch to QTAILQ, Gerd Hoffmann, 2011/05/04
- Re: [Qemu-devel] [PULL] usb patch queue, Anthony Liguori, 2011/05/05