]> xenbits.xensource.com Git - pvdrivers/win/xennet.git/commitdiff
64bit OIDs: 4-byte results are a success
authorOwen Smith <owen.smith@citrix.com>
Thu, 5 Mar 2015 15:47:51 +0000 (15:47 +0000)
committerPaul Durrant <paul.durrant@citrix.com>
Thu, 5 Mar 2015 16:24:04 +0000 (16:24 +0000)
When buffer is >= 8-bytes, return a 8-byte buffer,
when buffer is >= 4-bytes, return a 4-byte buffer,
else, indicate 8-bytes required and indicate failure

Signed-off-by: Owen Smith <owen.smith@citrix.com>
src/xennet/adapter.c

index 82fcbd10ba41947c2c1a71414c87c5d7848a4e56..dcd629fe0f4b936a3392f3ce56756b50ead2e108 100644 (file)
@@ -1151,17 +1151,16 @@ __CopyBuffer(
     IN  PVOID               Buffer,
     IN  ULONG               BufferLength,
     IN  PVOID               Source,
-    IN OUT PULONG           SourceLength
+    IN  ULONG               SourceLength
     )
 {
-    if (BufferLength >= *SourceLength) {
-        RtlCopyMemory(Buffer, Source, *SourceLength);
+    if (BufferLength >= SourceLength) {
+        RtlCopyMemory(Buffer, Source, SourceLength);
         return NDIS_STATUS_SUCCESS;
-    } else {
-        *SourceLength = BufferLength;
-        RtlCopyMemory(Buffer, Source, *SourceLength);
-        return NDIS_STATUS_BUFFER_TOO_SHORT;
     }
+
+    RtlCopyMemory(Buffer, Source, BufferLength);
+    return NDIS_STATUS_BUFFER_TOO_SHORT;
 }
 
 static FORCEINLINE NDIS_STATUS
@@ -1172,14 +1171,14 @@ __SetUlong(
     IN OUT PULONG           SourceLength
     )
 {
+    *SourceLength = sizeof(ULONG);
+
     if (BufferLength >= sizeof(ULONG)) {
-        *(PULONG)Buffer = Source;
-        *SourceLength = sizeof(ULONG);
+        *(PULONG)Buffer = (ULONG)Source;
         return NDIS_STATUS_SUCCESS;
-    } else {
-        *SourceLength = 0;
-        return NDIS_STATUS_BUFFER_TOO_SHORT;
     }
+
+    return NDIS_STATUS_BUFFER_TOO_SHORT;
 }
 
 static FORCEINLINE NDIS_STATUS
@@ -1190,18 +1189,20 @@ __SetUlong64(
     IN OUT PULONG           SourceLength
     )
 {
+    *SourceLength = sizeof(ULONGLONG);
+
     if (BufferLength >= sizeof(ULONGLONG)) {
         *(PULONGLONG)Buffer = Source;
-        *SourceLength = sizeof(ULONGLONG);
         return NDIS_STATUS_SUCCESS;
-    } else if (BufferLength == sizeof(ULONG)) {
+    }
+
+    if (BufferLength >= sizeof(ULONG)) {
         *(PULONG)Buffer = (ULONG)Source;
         *SourceLength = sizeof(ULONG);
-        return NDIS_STATUS_BUFFER_TOO_SHORT;
-    } else {
-        *SourceLength = 0;
-        return NDIS_STATUS_BUFFER_TOO_SHORT;
+        return NDIS_STATUS_SUCCESS;
     }
+
+    return NDIS_STATUS_BUFFER_TOO_SHORT;
 }
 
 NDIS_STATUS
@@ -1230,7 +1231,7 @@ AdapterQueryInformation(
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
                                   &Adapter->Capabilities,
-                                  &BytesWritten);
+                                  BytesWritten);
         break;
 
     case OID_PNP_QUERY_POWER:
@@ -1244,7 +1245,7 @@ AdapterQueryInformation(
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
                                   &XennetSupportedOids[0],
-                                  &BytesWritten);
+                                  BytesWritten);
         break;
 
     case OID_GEN_HARDWARE_STATUS:
@@ -1288,7 +1289,7 @@ AdapterQueryInformation(
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
                                   COMPANY_NAME_STR,
-                                  &BytesWritten);
+                                  BytesWritten);
         break;
 
     case OID_GEN_VENDOR_DRIVER_VERSION:
@@ -1336,7 +1337,7 @@ AdapterQueryInformation(
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
                                   &EthernetAddress,
-                                  &BytesWritten);
+                                  BytesWritten);
         break;
 
     case OID_802_3_CURRENT_ADDRESS:
@@ -1347,7 +1348,7 @@ AdapterQueryInformation(
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
                                   &EthernetAddress,
-                                  &BytesWritten);
+                                  BytesWritten);
         break;
 
     case OID_GEN_MAXIMUM_FRAME_SIZE: