use usb2_desc_foreach() to iterate the USB config descriptor instread of

accessing structures directly to check some invalid descriptors.

Pointed by:	hps
This commit is contained in:
Weongyo Jeong 2009-03-16 11:19:07 +00:00
parent 5bb89930e4
commit d3947a869c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=189874

View File

@ -63,6 +63,7 @@ __FBSDID("$FreeBSD$");
#include <dev/usb/usb_process.h>
#include <dev/usb/usb_device.h>
#include <dev/usb/usb_error.h>
#include <dev/usb/usb_parse.h>
#include <dev/usb/usb_request.h>
#include <compat/ndis/pe_var.h>
@ -1206,12 +1207,11 @@ USBD_ParseConfigurationDescriptorEx(conf, start, intfnum,
int32_t intfsubclass;
int32_t intfproto;
{
char *pos;
struct usb2_descriptor *next = NULL;
usb_interface_descriptor_t *desc;
for (pos = start; pos < ((char *)conf + UGETW(conf->wTotalLength));
pos += desc->bLength) {
desc = (usb_interface_descriptor_t *)pos;
while ((next = usb2_desc_foreach(conf, next)) != NULL) {
desc = (usb_interface_descriptor_t *)next;
if (desc->bDescriptorType != UDESC_INTERFACE)
continue;
if (!(intfnum == -1 || desc->bInterfaceNumber == intfnum))