886e707
diff -up xen-3.0.3_0-src/tools/ioemu/hw/ne2000.c.cve xen-3.0.3_0-src/tools/ioemu/hw/ne2000.c
886e707
--- xen-3.0.3_0-src/tools/ioemu/hw/ne2000.c.cve	2007-09-25 10:27:44.000000000 -0400
886e707
+++ xen-3.0.3_0-src/tools/ioemu/hw/ne2000.c	2007-09-25 10:27:47.000000000 -0400
886e707
@@ -252,7 +252,7 @@ static void ne2000_receive(void *opaque,
886e707
 {
886e707
     NE2000State *s = opaque;
886e707
     uint8_t *p;
886e707
-    int total_len, next, avail, len, index, mcast_idx;
886e707
+    unsigned int total_len, next, avail, len, index, mcast_idx;
886e707
     uint8_t buf1[60];
886e707
     static const uint8_t broadcast_macaddr[6] = 
886e707
         { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
886e707
@@ -327,7 +327,10 @@ static void ne2000_receive(void *opaque,
886e707
 
886e707
     /* write packet data */
886e707
     while (size > 0) {
886e707
-        avail = s->stop - index;
886e707
+        if (index <= s->stop)
886e707
+            avail = s->stop - index;
886e707
+        else
886e707
+            avail = 0;
886e707
         len = size;
886e707
         if (len > avail)
886e707
             len = avail;