[USBPORT] Avoid more integer overflows.
authorThomas Faber <thomas.faber@reactos.org>
Wed, 11 Oct 2017 18:05:55 +0000 (20:05 +0200)
committerThomas Faber <ThFabba@users.noreply.github.com>
Fri, 13 Oct 2017 21:36:29 +0000 (23:36 +0200)
drivers/usb/usbport/device.c

index 0a14bf8..b9063a7 100644 (file)
@@ -275,8 +275,8 @@ USBPORT_OpenInterface(IN PURB Urb,
 
     NumEndpoints = InterfaceDescriptor->bNumEndpoints;
 
-    Length = sizeof(USBD_INTERFACE_INFORMATION) +
-             (NumEndpoints - 1) * sizeof(USBD_PIPE_INFORMATION);
+    Length = FIELD_OFFSET(USBD_INTERFACE_INFORMATION, Pipes) +
+             NumEndpoints * sizeof(USBD_PIPE_INFORMATION);
 
     if (InterfaceInfo->AlternateSetting && IsSetInterface)
     {
@@ -289,8 +289,8 @@ USBPORT_OpenInterface(IN PURB Urb,
     }
     else
     {
-        HandleLength = sizeof(USBPORT_INTERFACE_HANDLE) +
-                       (NumEndpoints - 1) * sizeof(USBPORT_PIPE_HANDLE);
+        HandleLength = FIELD_OFFSET(USBPORT_INTERFACE_HANDLE, PipeHandle) +
+                       NumEndpoints * sizeof(USBPORT_PIPE_HANDLE);
 
         InterfaceHandle = ExAllocatePoolWithTag(NonPagedPool,
                                                 HandleLength,
@@ -500,8 +500,8 @@ USBPORT_InitInterfaceInfo(IN PUSBD_INTERFACE_INFORMATION InterfaceInfo,
     {
         NumberOfPipes = Descriptor->bNumEndpoints;
 
-        Length = sizeof(USBD_INTERFACE_INFORMATION) +
-                 (NumberOfPipes - 1) * sizeof(USBD_PIPE_INFORMATION);
+        Length = FIELD_OFFSET(USBD_INTERFACE_INFORMATION, Pipes) +
+                 NumberOfPipes * sizeof(USBD_PIPE_INFORMATION);
 
         if (InterfaceInfo->Length >= Length)
         {