]> git.proxmox.com Git - mirror_edk2.git/commitdiff
NetworkPkg:Fix NULL pointer dereference issues.
authorZhang Lubo <lubo.zhang@intel.com>
Thu, 26 Nov 2015 08:17:46 +0000 (08:17 +0000)
committerluobozhang <luobozhang@Edk2>
Thu, 26 Nov 2015 08:17:46 +0000 (08:17 +0000)
Revise some errors that some Null pointers may be dereferenced.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo <lubo.zhang@intel.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18961 6f19259b-4bc3-4df7-8a09-765794883524

NetworkPkg/HttpDxe/HttpImpl.c
NetworkPkg/HttpDxe/HttpImpl.h
NetworkPkg/HttpDxe/HttpProto.c

index 4ad07d4f230b5cf72d0187c3ece1f225a66450fe..0fa437dc327d977767987926fc26519fdd6e7a72 100644 (file)
@@ -40,6 +40,7 @@ EFI_HTTP_PROTOCOL  mEfiHttpTemplate = {
                                   This is NULL.\r
                                   HttpConfigData is NULL.\r
                                   HttpConfigData->AccessPoint is NULL.\r
+  @retval EFI_OUT_OF_RESOURCES    Could not allocate enough system resources.\r
   @retval EFI_NOT_STARTED         The HTTP instance is not configured.\r
 \r
 **/\r
@@ -71,6 +72,9 @@ EfiHttpGetModeData (
 \r
   if (HttpInstance->LocalAddressIsIPv6) {\r
     Http6AccessPoint = AllocateZeroPool (sizeof (EFI_HTTPv6_ACCESS_POINT));\r
+    if (Http6AccessPoint == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
     CopyMem (\r
       Http6AccessPoint,\r
       &HttpInstance->Ipv6Node,\r
@@ -79,6 +83,9 @@ EfiHttpGetModeData (
     HttpConfigData->AccessPoint.IPv6Node = Http6AccessPoint;\r
   } else {\r
     Http4AccessPoint = AllocateZeroPool (sizeof (EFI_HTTPv4_ACCESS_POINT));\r
+    if (Http4AccessPoint == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
     CopyMem (\r
       Http4AccessPoint,\r
       &HttpInstance->IPv4Node,\r
@@ -885,6 +892,8 @@ HttpResponseWorker (
       goto Error;\r
     }\r
 \r
+    ASSERT (HttpHeaders != NULL);\r
+\r
     //\r
     // Cache the part of body.\r
     //\r
@@ -1287,14 +1296,19 @@ EfiHttpPoll (
   HttpInstance = HTTP_INSTANCE_FROM_PROTOCOL (This);\r
   ASSERT (HttpInstance != NULL);\r
 \r
-  if (HttpInstance->State != HTTP_STATE_TCP_CONNECTED || (HttpInstance->Tcp4 == NULL && \r
-                                                          HttpInstance->Tcp6 == NULL)) {\r
+  if (HttpInstance->State != HTTP_STATE_TCP_CONNECTED) {\r
     return EFI_NOT_STARTED;\r
   }\r
   \r
   if (HttpInstance->LocalAddressIsIPv6) {\r
+    if (HttpInstance->Tcp6 == NULL) {\r
+      return EFI_NOT_STARTED;\r
+    }\r
     Status = HttpInstance->Tcp6->Poll (HttpInstance->Tcp6);\r
   } else {\r
+    if (HttpInstance->Tcp4 == NULL) {\r
+      return EFI_NOT_STARTED;\r
+    }\r
     Status = HttpInstance->Tcp4->Poll (HttpInstance->Tcp4);\r
   }\r
   \r
index 49c8af1b2100f4a75565152e000ef5fd7d651063..afbe9822835f513d5f5aad31f733d2e5ebe65cd7 100644 (file)
@@ -44,6 +44,7 @@
                                   This is NULL.\r
                                   HttpConfigData is NULL.\r
                                   HttpConfigData->AccessPoint is NULL.\r
+  @retval EFI_OUT_OF_RESOURCES    Could not allocate enough system resources.\r
   @retval EFI_NOT_STARTED         The HTTP instance is not configured.\r
 \r
 **/\r
index 999695125e5152554d3c3f2426d97549fab0a37d..85f84015405f9c7ff8739679ecb1d021c3948da0 100644 (file)
@@ -565,15 +565,14 @@ HttpCloseTcpRxEvent (
   EFI_TCP4_IO_TOKEN        *Rx4Token;\r
   EFI_TCP6_IO_TOKEN        *Rx6Token;\r
 \r
+  ASSERT (Wrap != NULL);\r
   HttpInstance   = Wrap->HttpInstance;\r
   Rx4Token       = NULL;\r
   Rx6Token       = NULL;\r
   \r
   if (HttpInstance->LocalAddressIsIPv6) {\r
-    if (Wrap != NULL) {\r
-      if (Wrap->TcpWrap.Rx6Token.CompletionToken.Event != NULL) {\r
-        gBS->CloseEvent (Wrap->TcpWrap.Rx6Token.CompletionToken.Event);\r
-      } \r
+    if (Wrap->TcpWrap.Rx6Token.CompletionToken.Event != NULL) {\r
+      gBS->CloseEvent (Wrap->TcpWrap.Rx6Token.CompletionToken.Event);\r
     }\r
 \r
     if (HttpInstance->Rx6Token.CompletionToken.Event != NULL) {\r
@@ -581,10 +580,8 @@ HttpCloseTcpRxEvent (
       HttpInstance->Rx6Token.CompletionToken.Event = NULL;\r
     }\r
   } else {\r
-    if (Wrap != NULL) {\r
-      if (Wrap->TcpWrap.Rx4Token.CompletionToken.Event != NULL) {\r
-        gBS->CloseEvent (Wrap->TcpWrap.Rx4Token.CompletionToken.Event);\r
-      }\r
+    if (Wrap->TcpWrap.Rx4Token.CompletionToken.Event != NULL) {\r
+      gBS->CloseEvent (Wrap->TcpWrap.Rx4Token.CompletionToken.Event);\r
     }\r
     \r
     if (HttpInstance->Rx4Token.CompletionToken.Event != NULL) {\r
@@ -1891,23 +1888,22 @@ HttpTcpTokenCleanup (
   EFI_TCP4_IO_TOKEN        *Rx4Token;\r
   EFI_TCP6_IO_TOKEN        *Rx6Token;\r
 \r
+  ASSERT (Wrap != NULL);\r
   HttpInstance   = Wrap->HttpInstance;\r
   Rx4Token       = NULL;\r
   Rx6Token       = NULL;\r
   \r
   if (HttpInstance->LocalAddressIsIPv6) {\r
-    if (Wrap != NULL) {\r
-      if (Wrap->TcpWrap.Rx6Token.CompletionToken.Event != NULL) {\r
-        gBS->CloseEvent (Wrap->TcpWrap.Rx6Token.CompletionToken.Event);\r
-      }\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
-      FreePool (Wrap); \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
+    FreePool (Wrap);\r
 \r
     if (HttpInstance->Rx6Token.CompletionToken.Event != NULL) {\r
       gBS->CloseEvent (HttpInstance->Rx6Token.CompletionToken.Event);\r
@@ -1921,18 +1917,16 @@ HttpTcpTokenCleanup (
     }\r
     \r
   } else {\r
-    if (Wrap != NULL) {\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
-      FreePool (Wrap);\r
+    if (Wrap->TcpWrap.Rx4Token.CompletionToken.Event != NULL) {\r
+      gBS->CloseEvent (Wrap->TcpWrap.Rx4Token.CompletionToken.Event);\r
     }\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
+    FreePool (Wrap);\r
+\r
     if (HttpInstance->Rx4Token.CompletionToken.Event != NULL) {\r
       gBS->CloseEvent (HttpInstance->Rx4Token.CompletionToken.Event);\r
       HttpInstance->Rx4Token.CompletionToken.Event = NULL;\r