]> git.proxmox.com Git - mirror_edk2.git/commitdiff
NetworkPkg/HttpDxe: Destroy the TLS instance when cleaning up the HTTP child
authorJiaxin Wu <jiaxin.wu@intel.com>
Mon, 31 Jul 2017 05:36:37 +0000 (13:36 +0800)
committerJiaxin Wu <jiaxin.wu@intel.com>
Wed, 2 Aug 2017 07:31:54 +0000 (15:31 +0800)
During clean up the HTTP child, all resources used by it should be cleaned. But
currently, TLS instance is not destroyed.

This patch is to fix this issue.

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

index c9ad59b1680cbd4b9ee601f11cd47fbf403c9721..8a9e57345af8802f0e53b2db0ff380d92465cb2f 100644 (file)
@@ -380,6 +380,7 @@ EfiHttpRequest (
 \r
       HttpInstance->TlsChildHandle = TlsCreateChild (\r
                                        ImageHandle,\r
+                                       &(HttpInstance->TlsSb),\r
                                        &(HttpInstance->Tls),\r
                                        &(HttpInstance->TlsConfiguration)\r
                                        );\r
index 3fda294be3cb61983d555424df1ea4abead2cbdb..ab00f3d6f25f050bd5177c7c21b020e5e67690bd 100644 (file)
@@ -864,6 +864,13 @@ HttpCleanProtocol (
   NetMapClean (&HttpInstance->TxTokens);\r
   NetMapClean (&HttpInstance->RxTokens);\r
 \r
+  if (HttpInstance->TlsSb != NULL && HttpInstance->TlsChildHandle != NULL) {\r
+    //\r
+    // Destroy the TLS instance.   \r
+    //
+    HttpInstance->TlsSb->DestroyChild (HttpInstance->TlsSb, HttpInstance->TlsChildHandle);\r
+  }\r
+\r
   if (HttpInstance->Tcp4ChildHandle != NULL) {\r
     gBS->CloseProtocol (\r
            HttpInstance->Tcp4ChildHandle,\r
index 95fb4843ce32ae4be44acde2f89687ae7772768b..04d36aaca0a0b9c65b5d138198edcbd67d28cf1d 100644 (file)
@@ -166,7 +166,8 @@ typedef struct _HTTP_PROTOCOL {
   // Https Support\r
   //\r
   BOOLEAN                          UseHttps;\r
-  \r
+\r
+  EFI_SERVICE_BINDING_PROTOCOL     *TlsSb;\r
   EFI_HANDLE                       TlsChildHandle; /// Tls ChildHandle\r
   TLS_CONFIG_DATA                  TlsConfigData;\r
   EFI_TLS_PROTOCOL                 *Tls;\r
index e4d9a37bee2db1528e16c242aba0ac256313f7b2..e6f4d5a6ccb285ac626c5e615c0e999829b151a5 100644 (file)
@@ -140,6 +140,7 @@ IsHttpsUrl (
   Creates a Tls child handle, open EFI_TLS_PROTOCOL and EFI_TLS_CONFIGURATION_PROTOCOL.\r
 \r
   @param[in]  ImageHandle           The firmware allocated handle for the UEFI image.\r
+  @param[out] TlsSb                 Pointer to the TLS SERVICE_BINDING_PROTOCOL.\r
   @param[out] TlsProto              Pointer to the EFI_TLS_PROTOCOL instance.\r
   @param[out] TlsConfiguration      Pointer to the EFI_TLS_CONFIGURATION_PROTOCOL instance.\r
 \r
@@ -150,15 +151,14 @@ EFI_HANDLE
 EFIAPI\r
 TlsCreateChild (\r
   IN  EFI_HANDLE                     ImageHandle,\r
+  OUT EFI_SERVICE_BINDING_PROTOCOL   **TlsSb,\r
   OUT EFI_TLS_PROTOCOL               **TlsProto,\r
   OUT EFI_TLS_CONFIGURATION_PROTOCOL **TlsConfiguration\r
   )\r
 {\r
   EFI_STATUS                    Status;\r
-  EFI_SERVICE_BINDING_PROTOCOL  *TlsSb;\r
   EFI_HANDLE                    TlsChildHandle;\r
 \r
-  TlsSb          = NULL;\r
   TlsChildHandle = 0;\r
 \r
   //\r
@@ -167,13 +167,13 @@ TlsCreateChild (
   gBS->LocateProtocol (\r
      &gEfiTlsServiceBindingProtocolGuid,\r
      NULL,\r
-     (VOID **) &TlsSb\r
+     (VOID **) TlsSb\r
      );\r
-  if (TlsSb == NULL) {\r
+  if (*TlsSb == NULL) {\r
     return NULL;\r
   }\r
 \r
-  Status = TlsSb->CreateChild (TlsSb, &TlsChildHandle);\r
+  Status = (*TlsSb)->CreateChild (*TlsSb, &TlsChildHandle);\r
   if (EFI_ERROR (Status)) {\r
     return NULL;\r
   }\r
@@ -187,7 +187,7 @@ TlsCreateChild (
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    TlsSb->DestroyChild (TlsSb, TlsChildHandle);\r
+    (*TlsSb)->DestroyChild (*TlsSb, TlsChildHandle);\r
     return NULL;\r
   }\r
 \r
@@ -200,7 +200,7 @@ TlsCreateChild (
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    TlsSb->DestroyChild (TlsSb, TlsChildHandle);\r
+    (*TlsSb)->DestroyChild (*TlsSb, TlsChildHandle);\r
     return NULL;\r
   }\r
 \r
index 68a6073cebf3a082ff67210339925fa5adedcb7a..f7a2d303e6aed3a2f13a2b26c6cb4682ebcad019 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The header files of miscellaneous routines specific to Https for HttpDxe driver.\r
 \r
-Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -37,6 +37,7 @@ IsHttpsUrl (
   Creates a Tls child handle, open EFI_TLS_PROTOCOL and EFI_TLS_CONFIGURATION_PROTOCOL.\r
 \r
   @param[in]  ImageHandle           The firmware allocated handle for the UEFI image.\r
+  @param[out] TlsSb                 Pointer to the TLS SERVICE_BINDING_PROTOCOL.\r
   @param[out] TlsProto              Pointer to the EFI_TLS_PROTOCOL instance.\r
   @param[out] TlsConfiguration      Pointer to the EFI_TLS_CONFIGURATION_PROTOCOL instance.\r
 \r
@@ -47,6 +48,7 @@ EFI_HANDLE
 EFIAPI\r
 TlsCreateChild (\r
   IN  EFI_HANDLE                     ImageHandle,\r
+  OUT EFI_SERVICE_BINDING_PROTOCOL   **TlsSb,\r
   OUT EFI_TLS_PROTOCOL               **TlsProto,\r
   OUT EFI_TLS_CONFIGURATION_PROTOCOL **TlsConfiguration\r
   );\r