patch-2.4.6 linux/drivers/usb/usb.c
Next file: linux/drivers/usb/usbkbd.c
Previous file: linux/drivers/usb/usb-uhci.c
Back to the patch index
Back to the overall index
- Lines: 85
- Date:
Tue Jun 12 15:53:37 2001
- Orig file:
v2.4.5/linux/drivers/usb/usb.c
- Orig date:
Sat Apr 28 11:28:09 2001
diff -u --recursive --new-file v2.4.5/linux/drivers/usb/usb.c linux/drivers/usb/usb.c
@@ -449,7 +449,7 @@
*/
list_del(&bus->bus_list);
- usbdevfs_remove_bus(bus);
+ usbdevfs_remove_bus(bus);
clear_bit(bus->busnum, busmap.busmap);
@@ -1869,6 +1869,7 @@
{
int result;
__u16 status;
+ unsigned char *buffer;
int endp=usb_pipeendpoint(pipe)|(usb_pipein(pipe)<<7);
/*
@@ -1883,9 +1884,19 @@
if (result < 0)
return result;
+ buffer = kmalloc(sizeof(status), GFP_KERNEL);
+ if (!buffer) {
+ err("unable to allocate memory for configuration descriptors");
+ return -ENOMEM;
+ }
+
result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
USB_REQ_GET_STATUS, USB_DIR_IN | USB_RECIP_ENDPOINT, 0, endp,
- &status, sizeof(status), HZ * SET_TIMEOUT);
+ buffer, sizeof(status), HZ * SET_TIMEOUT);
+
+ memcpy(&status, buffer, sizeof(status));
+ kfree(buffer);
+
if (result < 0)
return result;
@@ -1970,10 +1981,9 @@
{
int result;
unsigned int cfgno, length;
- unsigned char buffer[8];
+ unsigned char *buffer;
unsigned char *bigbuffer;
- struct usb_config_descriptor *desc =
- (struct usb_config_descriptor *)buffer;
+ struct usb_config_descriptor *desc;
if (dev->descriptor.bNumConfigurations > USB_MAXCONFIG) {
warn("too many configurations");
@@ -2002,6 +2012,13 @@
return -ENOMEM;
}
+ buffer = kmalloc(8, GFP_KERNEL);
+ if (!buffer) {
+ err("unable to allocate memory for configuration descriptors");
+ return -ENOMEM;
+ }
+ desc = (struct usb_config_descriptor *)buffer;
+
for (cfgno = 0; cfgno < dev->descriptor.bNumConfigurations; cfgno++) {
/* We grab the first 8 bytes so we know how long the whole */
/* configuration is */
@@ -2052,8 +2069,10 @@
}
}
+ kfree(buffer);
return 0;
err:
+ kfree(buffer);
dev->descriptor.bNumConfigurations = cfgno;
return result;
}
@@ -2162,7 +2181,7 @@
dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0;
err = usb_get_device_descriptor(dev);
- if (err < sizeof(dev->descriptor)) {
+ if (err < (signed)sizeof(dev->descriptor)) {
if (err < 0)
err("unable to get device descriptor (error=%d)", err);
else
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)