]> git.proxmox.com Git - mirror_edk2.git/commitdiff
NetworkPkg:Fix Network memory leak when calling GetModeData interface
authorZhang Lubo <lubo.zhang@intel.com>
Thu, 28 Jan 2016 02:32:43 +0000 (02:32 +0000)
committerluobozhang <luobozhang@Edk2>
Thu, 28 Jan 2016 02:32:43 +0000 (02:32 +0000)
Multiple network protocols have a GetModeData() interface, which may
allocate memory resource in the return mode data structure. It's
callers responsibility to free these buffers.

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: Wu Jiaxin <jiaxin.wu@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19758 6f19259b-4bc3-4df7-8a09-765794883524

NetworkPkg/Dhcp6Dxe/ComponentName.c
NetworkPkg/DnsDxe/ComponentName.c
NetworkPkg/DnsDxe/DnsImpl.c
NetworkPkg/HttpBootDxe/HttpBootDhcp6.c
NetworkPkg/Ip6Dxe/ComponentName.c
NetworkPkg/IpSecDxe/IkeService.c
NetworkPkg/Mtftp6Dxe/Mtftp6Support.c
NetworkPkg/TcpDxe/TcpMisc.c
NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c
NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c

index 927a7fe7ecc7468fc7c50c39a33ca0dd8c3aa308..ba612156a09f1001807eff58127731d258799848 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   UEFI Component Name(2) protocol implementation for Dhcp6 driver.\r
 \r
-  Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -286,7 +286,14 @@ UpdateName (
     }\r
     HandleName = mDhcp6ControllerName[Dhcp6ModeData.Ia->State];\r
   }\r
-  \r
+\r
+  if (Dhcp6ModeData.Ia != NULL) {\r
+    FreePool (Dhcp6ModeData.Ia);\r
+  }\r
+  if (Dhcp6ModeData.ClientId != NULL) {\r
+    FreePool (Dhcp6ModeData.ClientId);\r
+  }\r
+\r
   Status = AddUnicodeString2 (\r
              "eng",\r
              gDhcp6ComponentName.SupportedLanguages,\r
index d95ed92d8a2eaa4279f137fd36970bb038d78837..d976bc684984fe958284d6627a4a90a19a4c8856 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
 Implementation of EFI_COMPONENT_NAME_PROTOCOL and EFI_COMPONENT_NAME2_PROTOCOL protocol.\r
 \r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2016, 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
@@ -211,6 +211,13 @@ UpdateDns4Name (
     ModeData.DnsConfigData.LocalPort\r
     );\r
 \r
+  if (ModeData.DnsCacheList != NULL) {\r
+    FreePool (ModeData.DnsCacheList);\r
+  }\r
+  if (ModeData.DnsServerList != NULL) {\r
+    FreePool (ModeData.DnsServerList);\r
+  }\r
+\r
   if (gDnsControllerNameTable != NULL) {\r
     FreeUnicodeStringTable (gDnsControllerNameTable);\r
     gDnsControllerNameTable = NULL;\r
@@ -281,6 +288,13 @@ UpdateDns6Name (
     ModeData.DnsConfigData.LocalPort\r
     );\r
 \r
+  if (ModeData.DnsCacheList != NULL) {\r
+    FreePool (ModeData.DnsCacheList);\r
+  }\r
+  if (ModeData.DnsServerList != NULL) {\r
+    FreePool (ModeData.DnsServerList);\r
+  }\r
+\r
   if (gDnsControllerNameTable != NULL) {\r
     FreeUnicodeStringTable (gDnsControllerNameTable);\r
     gDnsControllerNameTable = NULL;\r
index 71daccea800db678acd5804a33245ae0268d0e9f..617e623286d86f448b77e224735c62cae6afc4d9 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
 DnsDxe support functions implementation.\r
   \r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2016, 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
@@ -618,11 +618,35 @@ Dns6GetMapping (
   while (!EFI_ERROR (gBS->CheckEvent (Service->TimerToGetMap))) {\r
     Udp->Poll (Udp);\r
 \r
-    if (!EFI_ERROR (Udp->GetModeData (Udp, NULL, &Ip6Mode, NULL, NULL)) &&\r
-        Ip6Mode.IsConfigured) {\r
+    if (!EFI_ERROR (Udp->GetModeData (Udp, NULL, &Ip6Mode, NULL, NULL))) {\r
+      if (Ip6Mode.AddressList != NULL) {\r
+        FreePool (Ip6Mode.AddressList);\r
+      }\r
 \r
-      Udp->Configure (Udp, NULL);\r
-      return (BOOLEAN) (Udp->Configure (Udp, UdpCfgData) == EFI_SUCCESS);\r
+      if (Ip6Mode.GroupTable != NULL) {\r
+        FreePool (Ip6Mode.GroupTable);\r
+      }\r
+\r
+      if (Ip6Mode.RouteTable != NULL) {\r
+        FreePool (Ip6Mode.RouteTable);\r
+      }\r
+\r
+      if (Ip6Mode.NeighborCache != NULL) {\r
+        FreePool (Ip6Mode.NeighborCache);\r
+      }\r
+\r
+      if (Ip6Mode.PrefixTable != NULL) {\r
+        FreePool (Ip6Mode.PrefixTable);\r
+      }\r
+\r
+      if (Ip6Mode.IcmpTypeList != NULL) {\r
+        FreePool (Ip6Mode.IcmpTypeList);\r
+      }\r
+\r
+      if (Ip6Mode.IsConfigured) {\r
+        Udp->Configure (Udp, NULL);\r
+        return (BOOLEAN) (Udp->Configure (Udp, UdpCfgData) == EFI_SUCCESS);\r
+      }\r
     }\r
   }\r
 \r
index e5cf894714e1a75dd501e9c769748f297b91546b..2538bd116ca42ddb47c2081c4fab3e03c0399766 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Functions implementation related with DHCPv6 for HTTP boot driver.\r
 \r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials are licensed and made available under \r
 the terms and conditions of the BSD License that accompanies this distribution.  \r
 The full text of the license may be found at\r
@@ -974,8 +974,13 @@ ON_EXIT:
     Dhcp6->Configure (Dhcp6, NULL);\r
   } else {\r
     ZeroMem (&Config, sizeof (EFI_DHCP6_CONFIG_DATA));\r
-    ZeroMem (&Mode, sizeof (EFI_DHCP6_MODE_DATA));\r
     Dhcp6->Configure (Dhcp6, &Config);\r
+    if (Mode.ClientId != NULL) {\r
+      FreePool (Mode.ClientId);\r
+    }\r
+    if (Mode.Ia != NULL) {\r
+      FreePool (Mode.Ia);\r
+    }\r
   }\r
 \r
   return Status; \r
index 75a1562ca07f31e2e3d1b78bf3c2f31763effde4..6a1f082edd7f6a86d1c6cd30f53dcccb17a59ee9 100644 (file)
@@ -2,7 +2,7 @@
   Implementation of EFI_COMPONENT_NAME_PROTOCOL and\r
   EFI_COMPONENT_NAME2_PROTOCOL protocol.\r
 \r
-  Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -263,6 +263,32 @@ UpdateName (
   //\r
   Offset = 0;\r
   Status = Ip6->GetModeData (Ip6, &Ip6ModeData, NULL, NULL);\r
+  if (!EFI_ERROR (Status)) {\r
+    if (Ip6ModeData.AddressList != NULL) {\r
+      FreePool (Ip6ModeData.AddressList);\r
+    }\r
+\r
+    if (Ip6ModeData.GroupTable != NULL) {\r
+      FreePool (Ip6ModeData.GroupTable);\r
+    }\r
+\r
+    if (Ip6ModeData.RouteTable != NULL) {\r
+      FreePool (Ip6ModeData.RouteTable);\r
+    }\r
+\r
+    if (Ip6ModeData.NeighborCache != NULL) {\r
+      FreePool (Ip6ModeData.NeighborCache);\r
+    }\r
+\r
+    if (Ip6ModeData.PrefixTable != NULL) {\r
+      FreePool (Ip6ModeData.PrefixTable);\r
+    }\r
+\r
+    if (Ip6ModeData.IcmpTypeList != NULL) {\r
+      FreePool (Ip6ModeData.IcmpTypeList);\r
+    }\r
+  }\r
+\r
   if (!EFI_ERROR (Status) && Ip6ModeData.IsStarted) {\r
     Status = NetLibIp6ToStr (&Ip6ModeData.ConfigData.StationAddress, Address, sizeof(Address));\r
     if (EFI_ERROR (Status)) {\r
index d8571960a011b61f44a4b7c23688640c42f7a13b..4c0f6f5eb108de2eeff210fa77eed45beeea0c0e 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Provide IPsec Key Exchange (IKE) service general interfaces.\r
 \r
-  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -328,6 +328,31 @@ IkeOpenOutputUdp (
       UdpIoFreeIo (UdpService->Output);\r
       goto ON_EXIT;\r
     }\r
+\r
+    if (Ip6ModeData.AddressList != NULL) {\r
+      FreePool (Ip6ModeData.AddressList);\r
+    }\r
+\r
+    if (Ip6ModeData.GroupTable != NULL) {\r
+      FreePool (Ip6ModeData.GroupTable);\r
+    }\r
+\r
+    if (Ip6ModeData.RouteTable != NULL) {\r
+      FreePool (Ip6ModeData.RouteTable);\r
+    }\r
+\r
+    if (Ip6ModeData.NeighborCache != NULL) {\r
+      FreePool (Ip6ModeData.NeighborCache);\r
+    }\r
+\r
+    if (Ip6ModeData.PrefixTable != NULL) {\r
+      FreePool (Ip6ModeData.PrefixTable);\r
+    }\r
+\r
+    if (Ip6ModeData.IcmpTypeList != NULL) {\r
+      FreePool (Ip6ModeData.IcmpTypeList);\r
+    }\r
+\r
     //\r
     // Reconfigure udp6 io without remote address.\r
     //\r
index c31fc9dc27707b88815b00088559ae993cfd6d23..64df901d60d81a940c49f79d1e301e78bd73507d 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Mtftp6 support functions implementation.\r
 \r
-  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -319,6 +319,29 @@ Mtftp6GetMapping (
     Status = Udp6->GetModeData (Udp6, NULL, &Ip6Mode, NULL, NULL);\r
 \r
     if (!EFI_ERROR (Status)) {\r
+      if (Ip6Mode.AddressList != NULL) {\r
+        FreePool (Ip6Mode.AddressList);\r
+      }\r
+\r
+      if (Ip6Mode.GroupTable != NULL) {\r
+        FreePool (Ip6Mode.GroupTable);\r
+      }\r
+\r
+      if (Ip6Mode.RouteTable != NULL) {\r
+        FreePool (Ip6Mode.RouteTable);\r
+      }\r
+\r
+      if (Ip6Mode.NeighborCache != NULL) {\r
+        FreePool (Ip6Mode.NeighborCache);\r
+      }\r
+\r
+      if (Ip6Mode.PrefixTable != NULL) {\r
+        FreePool (Ip6Mode.PrefixTable);\r
+      }\r
+\r
+      if (Ip6Mode.IcmpTypeList != NULL) {\r
+        FreePool (Ip6Mode.IcmpTypeList);\r
+      }\r
 \r
       if  (Ip6Mode.IsConfigured) {\r
         //\r
index 40962528884b573786b51e77b43513931f8334ec..13b9449906725bec789bd6b0bef6f60fbc28b718 100644 (file)
@@ -2,7 +2,7 @@
   Misc support routines for TCP driver.\r
 \r
   (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>\r
-  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -566,7 +566,31 @@ TcpGetRcvMss (
   } else {\r
     Ip6 = TcpProto->TcpService->IpIo->Ip.Ip6;\r
     ASSERT (Ip6 != NULL);\r
-    Ip6->GetModeData (Ip6, &Ip6Mode, NULL, NULL);\r
+    if (!EFI_ERROR (Ip6->GetModeData (Ip6, &Ip6Mode, NULL, NULL))) {\r
+      if (Ip6Mode.AddressList != NULL) {\r
+        FreePool (Ip6Mode.AddressList);\r
+      }\r
+\r
+      if (Ip6Mode.GroupTable != NULL) {\r
+        FreePool (Ip6Mode.GroupTable);\r
+      }\r
+\r
+      if (Ip6Mode.RouteTable != NULL) {\r
+        FreePool (Ip6Mode.RouteTable);\r
+      }\r
+\r
+      if (Ip6Mode.NeighborCache != NULL) {\r
+        FreePool (Ip6Mode.NeighborCache);\r
+      }\r
+\r
+      if (Ip6Mode.PrefixTable != NULL) {\r
+        FreePool (Ip6Mode.PrefixTable);\r
+      }\r
+\r
+      if (Ip6Mode.IcmpTypeList != NULL) {\r
+        FreePool (Ip6Mode.IcmpTypeList);\r
+      }\r
+    }\r
 \r
     return (UINT16) (Ip6Mode.MaxPacketSize - sizeof (TCP_HEAD));\r
   }\r
index 6ad5f5f1ac9fd5eb318a3fcd55e597d13e92dbd7..6d39437252ac17e57355536bf54c1a70f0f14524 100644 (file)
@@ -2,7 +2,7 @@
   Functions implementation related with DHCPv6 for UefiPxeBc Driver.\r
 \r
   (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>\r
-  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -2082,7 +2082,12 @@ PxeBcDhcp6Sarr (
   // to find a valid router address.\r
   //\r
   CopyMem (&Private->TmpStationIp.v6, &Mode.Ia->IaAddress[0].IpAddress, sizeof (EFI_IPv6_ADDRESS));\r
-\r
+  if (Mode.ClientId != NULL) {\r
+    FreePool (Mode.ClientId);\r
+  }\r
+  if (Mode.Ia != NULL) {\r
+    FreePool (Mode.Ia);\r
+  }\r
   //\r
   // Check the selected offer whether BINL retry is needed.\r
   //\r
index a6f66682f3b8f2fc108d6d3c9b75e54f94de180a..09c5753ad9e79938f1c129b350c3ad39aa9d8b2f 100644 (file)
@@ -2,7 +2,7 @@
   Driver Binding functions implementationfor for UefiPxeBc Driver.\r
 \r
   (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>\r
-  Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -1061,6 +1061,30 @@ PxeBcCreateIp6Children (
 \r
   Private->Ip6MaxPacketSize = Ip6ModeData.MaxPacketSize;\r
 \r
+  if (Ip6ModeData.AddressList != NULL) {\r
+    FreePool (Ip6ModeData.AddressList);\r
+  }\r
+\r
+  if (Ip6ModeData.GroupTable != NULL) {\r
+    FreePool (Ip6ModeData.GroupTable);\r
+  }\r
+\r
+  if (Ip6ModeData.RouteTable != NULL) {\r
+    FreePool (Ip6ModeData.RouteTable);\r
+  }\r
+\r
+  if (Ip6ModeData.NeighborCache != NULL) {\r
+    FreePool (Ip6ModeData.NeighborCache);\r
+  }\r
+\r
+  if (Ip6ModeData.PrefixTable != NULL) {\r
+    FreePool (Ip6ModeData.PrefixTable);\r
+  }\r
+\r
+  if (Ip6ModeData.IcmpTypeList != NULL) {\r
+    FreePool (Ip6ModeData.IcmpTypeList);\r
+  }\r
+\r
   //\r
   // Locate Ip6->Ip6Config and store it for set IPv6 address.\r
   //\r