]> xenbits.xensource.com Git - pvdrivers/win/xennet.git/commitdiff
Avoid ASSERTion failure caused by sample ordering reversal 8.2.0-rc1
authorPaul Durrant <paul.durrant@citrix.com>
Fri, 4 Nov 2016 16:02:07 +0000 (16:02 +0000)
committerPaul Durrant <paul.durrant@citrix.com>
Fri, 4 Nov 2016 16:02:07 +0000 (16:02 +0000)
In __ReceiverPushPackets() the value of Receiver->Indicated is sampled
prior to the value of Receiver->Returned. This allows packets to be
indicated and returned on other CPUs between the two sample points
leading to an ASSERTion failure because the value of Returned will be
greater than that of Indicated.

The solution is simply to reverse the sample ordering.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
src/xennet/receiver.c

index ccc00ec89e2ed824706ba6f48ede06646d9e40d5..e5635d23191ac614322def442010c4eb6be3a724 100644 (file)
@@ -377,11 +377,13 @@ __ReceiverPushPackets(
 
     KeReleaseSpinLockFromDpcLevel(&Queue->Lock);
 
-    Indicated = InterlockedAdd(&Receiver->Indicated, Count);
+    (VOID) InterlockedAdd(&Receiver->Indicated, Count);
+
+    Returned = Receiver->Returned;
 
     KeMemoryBarrier();
 
-    Returned = Receiver->Returned;
+    Indicated = Receiver->Indicated;
 
     Flags = NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL |
             NDIS_RECEIVE_FLAGS_PERFECT_FILTERED;