]> git.proxmox.com Git - mirror_edk2.git/commitdiff
NetworkPkg: Fix incorrect buffer free in HttpDxe
authorJiaxin Wu <jiaxin.wu@intel.com>
Wed, 27 Apr 2016 06:29:29 +0000 (14:29 +0800)
committerJiaxin Wu <jiaxin.wu@intel.com>
Thu, 28 Apr 2016 08:28:04 +0000 (16:28 +0800)
FragmentBuffer of each TcpWrap in HttpDxe should not be
freed in HttpTcpTokenCleanup(). This buffer points to
HttpMsg body actually, which is the responsibility of the
caller to allocate a buffer for Body.

Cc: Ye Ting <ting.ye@intel.com>
Cc: Fu Siyuan <siyuan.fu@intel.com>
Cc: Zhang Lubo <lubo.zhang@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
NetworkPkg/HttpDxe/HttpProto.c

index 06f3bb686061c8c62310fe99dc07c8b07dfd31cf..f3992edfdc803b5d4b5f5cbc1f8d0a87ae43bd3e 100644 (file)
@@ -1837,45 +1837,45 @@ HttpTcpTokenCleanup (
   Rx6Token       = NULL;\r
   \r
   if (HttpInstance->LocalAddressIsIPv6) {\r
-    if (Wrap->TcpWrap.Rx6Token.CompletionToken.Event != NULL) {\r
-      gBS->CloseEvent (Wrap->TcpWrap.Rx6Token.CompletionToken.Event);\r
-    }\r
-\r
     Rx6Token = &Wrap->TcpWrap.Rx6Token;\r
-    if (Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer != NULL) {\r
-      FreePool (Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer);\r
-      Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer = NULL;\r
+    \r
+    if (Rx6Token->CompletionToken.Event != NULL) {\r
+      gBS->CloseEvent (Rx6Token->CompletionToken.Event);\r
+      Rx6Token->CompletionToken.Event = NULL;\r
     }\r
-    FreePool (Wrap);\r
 \r
-    if (HttpInstance->Rx6Token.CompletionToken.Event != NULL) {\r
-      gBS->CloseEvent (HttpInstance->Rx6Token.CompletionToken.Event);\r
-      HttpInstance->Rx6Token.CompletionToken.Event = NULL;\r
-    }\r
+    FreePool (Wrap);\r
 \r
     Rx6Token = &HttpInstance->Rx6Token;\r
+    \r
+    if (Rx6Token->CompletionToken.Event != NULL) {\r
+      gBS->CloseEvent (Rx6Token->CompletionToken.Event);\r
+      Rx6Token->CompletionToken.Event = NULL;\r
+    }\r
+    \r
     if (Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer != NULL) {\r
       FreePool (Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer);\r
       Rx6Token->Packet.RxData->FragmentTable[0].FragmentBuffer = NULL;\r
     }\r
     \r
   } else {\r
-    if (Wrap->TcpWrap.Rx4Token.CompletionToken.Event != NULL) {\r
-      gBS->CloseEvent (Wrap->TcpWrap.Rx4Token.CompletionToken.Event);\r
-    }\r
     Rx4Token = &Wrap->TcpWrap.Rx4Token;\r
-    if (Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer != NULL) {\r
-      FreePool (Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer);\r
-      Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer = NULL;\r
+  \r
+    if (Rx4Token->CompletionToken.Event != NULL) {\r
+      gBS->CloseEvent (Rx4Token->CompletionToken.Event);\r
+      Rx4Token->CompletionToken.Event = NULL;\r
     }\r
+    \r
     FreePool (Wrap);\r
 \r
-    if (HttpInstance->Rx4Token.CompletionToken.Event != NULL) {\r
-      gBS->CloseEvent (HttpInstance->Rx4Token.CompletionToken.Event);\r
-      HttpInstance->Rx4Token.CompletionToken.Event = NULL;\r
+    Rx4Token = &HttpInstance->Rx4Token;\r
+\r
+    if (Rx4Token->CompletionToken.Event != NULL) {\r
+      gBS->CloseEvent (Rx4Token->CompletionToken.Event);\r
+      Rx4Token->CompletionToken.Event = NULL;\r
     }\r
     \r
-    Rx4Token = &HttpInstance->Rx4Token;\r
+    \r
     if (Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer != NULL) {\r
       FreePool (Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer);\r
       Rx4Token->Packet.RxData->FragmentTable[0].FragmentBuffer = NULL;\r