这个看起来有点问题

/* ~~~ C 有差异: _IOSurfaceAcceleratorParavirtProcessGuestData [_IOSurfaceAcceleratorParavirtProcessGuestData] ~~~ */
--- 27.0
+++ 27.2
@@ -1,25 +1,29 @@
 
-void _IOSurfaceAcceleratorParavirtProcessGuestData(long param_1,int *param_2)
+void _IOSurfaceAcceleratorParavirtProcessGuestData(long param_1,int *param_2,ulong param_3)
 
 {
   int iVar1;
   int iVar2;
   undefined8 uVar3;
   int *piVar4;
   undefined8 uVar5;
   long lVar6;
-  int *piVar7;
+  ulong *puVar7;
   
-  iVar2 = -0x1ffffd3e;
+  if (param_3 < 8) {
+    return;
+  }
   if (param_2 == (int *)0x0) {
     return;
   }
   iVar1 = *(int *)(param_1 + 0x24);
   if (iVar1 == 0) {
     return;
   }
   if (*param_2 == 2) {
+    iVar2 = -0x1ffffd3e;
+    if (param_3 < 0x610) goto _IOSurfaceAcceleratorParavirtProcessGuestData;
     piVar4 = param_2 + 2;
     if (*(long *)(param_2 + 4) != 0) {
       *(long *)(param_2 + 4) = 0;
       param_2[6] = 0;
@@ -40,18 +44,23 @@
     iVar1 = *(int *)(param_1 + 0x24);
     uVar3 = 1;
     uVar5 = 0x1b0;
     lVar6 = 0;
-    piVar7 = (int *)0x0;
+    puVar7 = (ulong *)0x0;
   }
   else {
-    if ((*param_2 != 1) || (lVar6 = *(long *)(param_2 + 4), lVar6 == 0)) goto _IOSurfaceAcceleratorParavirtProcessGuestData;
-    piVar7 = param_2 + 6;
+    iVar2 = -0x1ffffd3e;
+    if (((*param_2 != 1) || (param_3 < 0x20)) ||
+       (lVar6 = *(long *)(param_2 + 4), iVar2 = -0x1ffffd3e, lVar6 == 0)) goto _IOSurfaceAcceleratorParavirtProcessGuestData;
+    puVar7 = (ulong *)(param_2 + 6);
+    if (0x298 < *puVar7) {
+      *puVar7 = 0x298;
+    }
     uVar3 = 0xb;
     piVar4 = (int *)0x0;
     uVar5 = 0;
   }
-  iVar2 = raw_2880fa660(iVar1,uVar3,piVar4,uVar5,lVar6,piVar7);
+  iVar2 = raw_290103440(iVar1,uVar3,piVar4,uVar5,lVar6,puVar7);
 _IOSurfaceAcceleratorParavirtProcessGuestData:
   param_2[1] = iVar2;
   return;
 }