]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/IpSecDxe/Ikev2/Sa.c
NetworkPkg: Remove ASSERT and use error handling in IpSecDxe
[mirror_edk2.git] / NetworkPkg / IpSecDxe / Ikev2 / Sa.c
index 9967e1a682ae198d30bbd3cd162fa1be43e58643..c83d45678b60136f65976eed38b1bac3c9584604 100644 (file)
@@ -2,7 +2,7 @@
   The operations for IKEv2 SA.\r
 \r
   (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
-  Copyright (c) 2010 - 2011, 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
@@ -102,7 +102,9 @@ Ikev2InitPskGenerator (
   // 1. Allocate IKE packet\r
   //\r
   IkePacket = IkePacketAlloc ();\r
-  ASSERT (IkePacket != NULL);\r
+  if (IkePacket == NULL) {\r
+    goto CheckError;\r
+  }\r
 \r
   //\r
   // 1.a Fill the IkePacket->Hdr\r
@@ -176,7 +178,9 @@ Ikev2InitPskGenerator (
   if ((IkeSaSession->SessionCommon.IsInitiator) && (IkeSaSession->NCookie == NULL)) {\r
     IkeSaSession->NiBlkSize = IKE_NONCE_SIZE;\r
     IkeSaSession->NiBlock   = IkeGenerateNonce (IKE_NONCE_SIZE);\r
-    ASSERT (IkeSaSession->NiBlock != NULL);\r
+    if (IkeSaSession->NiBlock == NULL) {\r
+      goto CheckError;\r
+    }\r
   }\r
 \r
   if (IkeSaSession->SessionCommon.IsInitiator) {\r
@@ -298,7 +302,11 @@ Ikev2InitPskParser (
   //\r
   NonceSize   = NoncePayload->PayloadSize - sizeof (IKEV2_COMMON_PAYLOAD_HEADER);\r
   NonceBuffer = (UINT8 *) AllocatePool (NonceSize);\r
-  ASSERT (NonceBuffer != NULL);\r
+  if (NonceBuffer == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto CheckError;\r
+  }\r
+  \r
   CopyMem (\r
     NonceBuffer,\r
     NoncePayload->PayloadBuf + sizeof (IKEV2_COMMON_PAYLOAD_HEADER),\r
@@ -444,7 +452,9 @@ Ikev2AuthPskGenerator (
   // 1. Allocate IKE Packet\r
   //\r
   IkePacket= IkePacketAlloc ();\r
-  ASSERT (IkePacket != NULL);\r
+  if (IkePacket == NULL) {\r
+    return NULL;\r
+  }\r
 \r
   //\r
   // 1.a Fill the IkePacket Header.\r
@@ -745,7 +755,10 @@ Ikev2AuthPskParser (
     //\r
     if (ChildSaSession->IkeSaSession->Spd == NULL) {\r
       ChildSaSession->IkeSaSession->Spd = ChildSaSession->Spd;\r
-      Ikev2ChildSaSessionSpdSelectorCreate (ChildSaSession);\r
+      Status = Ikev2ChildSaSessionSpdSelectorCreate (ChildSaSession);\r
+      if (EFI_ERROR (Status)) {\r
+        return Status;\r
+      }\r
     }\r
   } else {\r
     //\r
@@ -930,7 +943,9 @@ Ikev2AuthCertGenerator (
   // 1. Allocate IKE Packet\r
   //\r
   IkePacket= IkePacketAlloc ();\r
-  ASSERT (IkePacket != NULL);\r
+  if (IkePacket == NULL) {\r
+    return NULL;\r
+  }\r
 \r
   //\r
   // 1.a Fill the IkePacket Header.\r
@@ -1280,7 +1295,10 @@ Ikev2AuthCertParser (
     //\r
     if (ChildSaSession->IkeSaSession->Spd == NULL) {\r
       ChildSaSession->IkeSaSession->Spd = ChildSaSession->Spd;\r
-      Ikev2ChildSaSessionSpdSelectorCreate (ChildSaSession);\r
+      Status = Ikev2ChildSaSessionSpdSelectorCreate (ChildSaSession);\r
+      if (EFI_ERROR (Status)) {\r
+        goto Exit;\r
+      }\r
     }\r
   } else {\r
     //\r
@@ -1360,17 +1378,27 @@ Ikev2GenerateSaDhPublicKey (
   IKEV2_SESSION_KEYS *IkeKeys;\r
 \r
   IkeSaSession->IkeKeys = AllocateZeroPool (sizeof (IKEV2_SESSION_KEYS));\r
-  ASSERT (IkeSaSession->IkeKeys != NULL);\r
+  if (IkeSaSession->IkeKeys == NULL) {\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
+  \r
   IkeKeys = IkeSaSession->IkeKeys;\r
   IkeKeys->DhBuffer = AllocateZeroPool (sizeof (IKEV2_DH_BUFFER));\r
-  ASSERT (IkeKeys->DhBuffer != NULL);\r
+  if (IkeKeys->DhBuffer == NULL) {\r
+    FreePool (IkeSaSession->IkeKeys);\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
 \r
   //\r
   // Init DH with the certain DH Group Description.\r
   //\r
   IkeKeys->DhBuffer->GxSize   = OakleyModpGroup[(UINT8)IkeSaSession->SessionCommon.PreferDhGroup].Size >> 3;\r
   IkeKeys->DhBuffer->GxBuffer = AllocateZeroPool (IkeKeys->DhBuffer->GxSize);\r
-  ASSERT (IkeKeys->DhBuffer->GxBuffer != NULL);\r
+  if (IkeKeys->DhBuffer->GxBuffer == NULL) {\r
+    FreePool (IkeKeys->DhBuffer);\r
+    FreePool (IkeSaSession->IkeKeys);\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
 \r
   //\r
   // Get X PublicKey\r
@@ -1385,6 +1413,13 @@ Ikev2GenerateSaDhPublicKey (
              );\r
   if (EFI_ERROR (Status)) {\r
     DEBUG ((DEBUG_ERROR, "Error CPLKeyManGetKeyParam X public key error Status = %r\n", Status));\r
+    \r
+    FreePool (IkeKeys->DhBuffer->GxBuffer);\r
+    \r
+    FreePool (IkeKeys->DhBuffer);\r
+    \r
+    FreePool (IkeSaSession->IkeKeys);\r
+    \r
     return Status;\r
   }\r
 \r
@@ -1422,7 +1457,9 @@ Ikev2GenerateSaDhComputeKey (
   PubKeySize          = KePayload->PayloadSize - sizeof (IKEV2_KEY_EXCHANGE);\r
   DhBuffer->GxySize   = DhBuffer->GxSize;\r
   DhBuffer->GxyBuffer = AllocateZeroPool (DhBuffer->GxySize);\r
-  ASSERT (DhBuffer->GxyBuffer != NULL);\r
+  if (DhBuffer->GxyBuffer == NULL) {\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
 \r
   //\r
   // Get GxyBuf\r
@@ -1436,6 +1473,9 @@ Ikev2GenerateSaDhComputeKey (
              );\r
   if (EFI_ERROR (Status)) {\r
     DEBUG ((DEBUG_ERROR, "Error CPLKeyManGetKeyParam Y session key error Status = %r\n", Status));\r
+\r
+    FreePool (DhBuffer->GxyBuffer);\r
+    \r
     return Status;\r
   }\r
 \r
@@ -1444,7 +1484,12 @@ Ikev2GenerateSaDhComputeKey (
   //\r
   DhBuffer->GySize   = PubKeySize;\r
   DhBuffer->GyBuffer = AllocateZeroPool (DhBuffer->GySize);\r
-  ASSERT (DhBuffer->GyBuffer != NULL);\r
+  if (DhBuffer->GyBuffer == NULL) {\r
+    FreePool (DhBuffer->GxyBuffer);\r
+    \r
+    return Status;\r
+  }\r
+  \r
   CopyMem (DhBuffer->GyBuffer, PubKey, DhBuffer->GySize);\r
 \r
   IPSEC_DUMP_BUF ("DH Public Key (g^y) Dump", DhBuffer->GyBuffer, DhBuffer->GySize);\r
@@ -1524,7 +1569,10 @@ Ikev2GenerateSaKeys (
   //\r
   KeyBufferSize = IkeSaSession->NiBlkSize + IkeSaSession->NrBlkSize;\r
   KeyBuffer     = AllocateZeroPool (KeyBufferSize);\r
-  ASSERT (KeyBuffer != NULL);\r
+  if (KeyBuffer == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Exit;\r
+  }\r
 \r
   CopyMem (KeyBuffer, IkeSaSession->NiBlock, IkeSaSession->NiBlkSize);\r
   CopyMem (KeyBuffer + IkeSaSession->NiBlkSize, IkeSaSession->NrBlock, IkeSaSession->NrBlkSize);\r