]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/TcpDxe/TcpOutput.c
NetworkPkg/TcpDxe: Check TCP payload for release version.
[mirror_edk2.git] / NetworkPkg / TcpDxe / TcpOutput.c
index a7e59f0ed6e0e60aa97aa2e755f0be4222eccd38..1697514a92bff1b1e4981e0ff1b71f4a5af430e0 100644 (file)
@@ -292,7 +292,11 @@ TcpTransmitSegment (
   BOOLEAN   Syn;\r
   UINT32    DataLen;\r
 \r
-  ASSERT ((Nbuf != NULL) && (Nbuf->Tcp == NULL) && (TcpVerifySegment (Nbuf) != 0));\r
+  ASSERT ((Nbuf != NULL) && (Nbuf->Tcp == NULL));\r
+\r
+  if (TcpVerifySegment (Nbuf) == 0) {\r
+    return -1; \r
+  }\r
 \r
   DataLen = Nbuf->TotalSize;\r
 \r
@@ -634,7 +638,11 @@ TcpGetSegment (
     Nbuf = TcpGetSegmentSock (Tcb, Seq, Len);\r
   }\r
 \r
-  ASSERT (TcpVerifySegment (Nbuf) != 0);\r
+  if (TcpVerifySegment (Nbuf) == 0) {\r
+    NetbufFree (Nbuf);\r
+    return NULL;\r
+  }\r
+  \r
   return Nbuf;\r
 }\r
 \r
@@ -701,7 +709,9 @@ TcpRetransmit (
     return -1;\r
   }\r
 \r
-  ASSERT (TcpVerifySegment (Nbuf) != 0);\r
+  if (TcpVerifySegment (Nbuf) == 0) {\r
+    goto OnError;\r
+  }\r
 \r
   if (TcpTransmitSegment (Tcb, Nbuf) != 0) {\r
     goto OnError;\r
@@ -886,8 +896,14 @@ TcpToSendData (
     Seg->End  = End;\r
     Seg->Flag = Flag;\r
 \r
-    ASSERT (TcpVerifySegment (Nbuf) != 0);\r
-    ASSERT (TcpCheckSndQue (&Tcb->SndQue) != 0);\r
+    if (TcpVerifySegment (Nbuf) == 0 || TcpCheckSndQue (&Tcb->SndQue) == 0) {\r
+      DEBUG (\r
+        (EFI_D_ERROR,\r
+        "TcpToSendData: discard a broken segment for TCB %p\n",\r
+        Tcb)\r
+        );\r
+      goto OnError;\r
+    }\r
 \r
     //\r
     // Don't send an empty segment here.\r
@@ -899,8 +915,7 @@ TcpToSendData (
         Tcb)\r
         );\r
 \r
-      NetbufFree (Nbuf);\r
-      return Sent;\r
+      goto OnError;\r
     }\r
 \r
     if (TcpTransmitSegment (Tcb, Nbuf) != 0) {\r