]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/IpSecDxe/Ikev2/Sa.c
Merge branch 'master' of https://github.com/tianocore/edk2
[mirror_edk2.git] / NetworkPkg / IpSecDxe / Ikev2 / Sa.c
index c83d45678b60136f65976eed38b1bac3c9584604..4cbfac33b1344bc4def1540b30fc5f8bf57e1c9f 100644 (file)
@@ -384,7 +384,7 @@ Ikev2InitPskParser (
     // 5. Generate Nr_b\r
     //\r
     IkeSaSession->NrBlock   = IkeGenerateNonce (IKE_NONCE_SIZE);\r
-    ASSERT_EFI_ERROR (IkeSaSession->NrBlock != NULL);\r
+    ASSERT (IkeSaSession->NrBlock != NULL);\r
     IkeSaSession->NrBlkSize = IKE_NONCE_SIZE;\r
 \r
     //\r
@@ -445,6 +445,13 @@ Ikev2AuthPskGenerator (
   IkeSaSession   = (IKEV2_SA_SESSION *) SaSession;\r
   ChildSaSession = IKEV2_CHILD_SA_SESSION_BY_IKE_SA (GetFirstNode (&IkeSaSession->ChildSaSessionList));\r
 \r
+  IkePacket      = NULL;\r
+  IdPayload      = NULL;\r
+  AuthPayload    = NULL;\r
+  SaPayload      = NULL;\r
+  TsiPayload     = NULL;\r
+  TsrPayload     = NULL;\r
+  NotifyPayload  = NULL;\r
   CpPayload      = NULL;\r
   NotifyPayload  = NULL;\r
   \r
@@ -488,6 +495,9 @@ Ikev2AuthPskGenerator (
                 &IkeSaSession->SessionCommon,\r
                 IKEV2_PAYLOAD_TYPE_AUTH\r
                 );\r
+  if (IdPayload == NULL) {\r
+    goto CheckError;\r
+  }\r
 \r
   //\r
   // 3. Generate Auth Payload\r
@@ -522,6 +532,14 @@ Ikev2AuthPskGenerator (
                     IKEV2_CFG_ATTR_INTERNAL_IP6_ADDRESS\r
                     );\r
     }\r
+\r
+     if (CpPayload == NULL) {\r
+      goto CheckError;\r
+    }\r
+  }\r
+\r
+  if (AuthPayload == NULL) {\r
+    goto CheckError;\r
   }\r
 \r
   //\r
@@ -532,6 +550,9 @@ Ikev2AuthPskGenerator (
                 IKEV2_PAYLOAD_TYPE_TS_INIT,\r
                 IkeSessionTypeChildSa\r
                 );\r
+  if (SaPayload == NULL) {\r
+    goto CheckError;\r
+  }\r
 \r
   if (IkeSaSession->Spd->Data->ProcessingPolicy->Mode == EfiIPsecTransport) {\r
     //\r
@@ -562,6 +583,9 @@ Ikev2AuthPskGenerator (
                       NULL,\r
                       0\r
                       );\r
+    if (NotifyPayload == NULL) {\r
+      goto CheckError;\r
+    }\r
   } else {\r
     //\r
     // Generate Tsr for Tunnel mode.\r
@@ -578,6 +602,10 @@ Ikev2AuthPskGenerator (
                    );\r
   }\r
 \r
+  if (TsiPayload == NULL || TsrPayload == NULL) {\r
+    goto CheckError;\r
+  }\r
+\r
   IKE_PACKET_APPEND_PAYLOAD (IkePacket, IdPayload);\r
   IKE_PACKET_APPEND_PAYLOAD (IkePacket, AuthPayload);\r
   if (IkeSaSession->Spd->Data->ProcessingPolicy->Mode == EfiIPsecTunnel) {\r
@@ -591,6 +619,41 @@ Ikev2AuthPskGenerator (
   }\r
 \r
   return IkePacket;\r
+\r
+CheckError:\r
+  if (IkePacket != NULL) {\r
+    IkePacketFree (IkePacket);\r
+  }\r
+  \r
+  if (IdPayload != NULL) {\r
+    IkePayloadFree (IdPayload);\r
+  }\r
+\r
+  if (AuthPayload != NULL) {\r
+    IkePayloadFree (AuthPayload);\r
+  }\r
+  \r
+  if (CpPayload != NULL) {\r
+    IkePayloadFree (CpPayload);\r
+  }\r
+\r
+  if (SaPayload != NULL) {\r
+    IkePayloadFree (SaPayload);\r
+  }\r
+  \r
+  if (TsiPayload != NULL) {\r
+    IkePayloadFree (TsiPayload);\r
+  }\r
+  \r
+  if (TsrPayload != NULL) {\r
+    IkePayloadFree (TsrPayload);\r
+  }\r
+  \r
+  if (NotifyPayload != NULL) {\r
+    IkePayloadFree (NotifyPayload);\r
+  }\r
+  \r
+  return NULL; \r
 }\r
 \r
 /**\r
@@ -800,7 +863,11 @@ Ikev2AuthPskParser (
   //\r
   // 5. Generate keymats for IPsec protocol.\r
   //\r
-  Ikev2GenerateChildSaKeys (ChildSaSession, NULL);\r
+  Status = Ikev2GenerateChildSaKeys (ChildSaSession, NULL);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+  \r
   if (IkeSaSession->SessionCommon.IsInitiator) {\r
     //\r
     // 6. Change the state of IkeSaSession\r
@@ -934,7 +1001,13 @@ Ikev2AuthCertGenerator (
   IkeSaSession   = (IKEV2_SA_SESSION *) SaSession;\r
   ChildSaSession = IKEV2_CHILD_SA_SESSION_BY_IKE_SA (GetFirstNode (&IkeSaSession->ChildSaSessionList));\r
 \r
+  IkePacket      = NULL;\r
+  IdPayload      = NULL;\r
+  AuthPayload    = NULL;\r
   CpPayload      = NULL;\r
+  SaPayload      = NULL;\r
+  TsiPayload     = NULL;\r
+  TsrPayload     = NULL;\r
   NotifyPayload  = NULL;\r
   CertPayload    = NULL;\r
   CertReqPayload = NULL;\r
@@ -981,6 +1054,9 @@ Ikev2AuthCertGenerator (
                 (UINT8 *)PcdGetPtr (PcdIpsecUefiCertificate),\r
                 PcdGet32 (PcdIpsecUefiCertificateSize)\r
                 );\r
+  if (IdPayload == NULL) {\r
+    goto CheckError;\r
+  }\r
 \r
   //\r
   // 3. Generate Certificate Payload\r
@@ -993,6 +1069,10 @@ Ikev2AuthCertGenerator (
                   IKEV2_CERT_ENCODEING_X509_CERT_SIGN,\r
                   FALSE\r
                   );\r
+  if (CertPayload == NULL) {\r
+    goto CheckError;\r
+  }\r
+  \r
   if (IkeSaSession->SessionCommon.IsInitiator) {\r
     CertReqPayload = Ikev2GenerateCertificatePayload (\r
                        IkeSaSession,\r
@@ -1002,6 +1082,9 @@ Ikev2AuthCertGenerator (
                        IKEV2_CERT_ENCODEING_HASH_AND_URL_OF_X509_CERT,\r
                        TRUE\r
                        );\r
+    if (CertReqPayload == NULL) {\r
+      goto CheckError;\r
+    } \r
   }\r
 \r
   //\r
@@ -1044,8 +1127,16 @@ Ikev2AuthCertGenerator (
                     IKEV2_CFG_ATTR_INTERNAL_IP6_ADDRESS\r
                     );\r
     }\r
+    \r
+    if (CpPayload == NULL) {\r
+      goto CheckError;\r
+    } \r
   }\r
 \r
+  if (AuthPayload == NULL) {\r
+    goto CheckError;\r
+  }  \r
+\r
   //\r
   // 5. Generate SA Payload according to the Sa Data in ChildSaSession\r
   //\r
@@ -1054,6 +1145,9 @@ Ikev2AuthCertGenerator (
                 IKEV2_PAYLOAD_TYPE_TS_INIT,\r
                 IkeSessionTypeChildSa\r
                 );\r
+  if (SaPayload == NULL) {\r
+    goto CheckError;\r
+  }\r
 \r
   if (IkeSaSession->Spd->Data->ProcessingPolicy->Mode == EfiIPsecTransport) {\r
     //\r
@@ -1084,6 +1178,9 @@ Ikev2AuthCertGenerator (
                       NULL,\r
                       0\r
                       );\r
+    if (NotifyPayload == NULL) {\r
+      goto CheckError;\r
+    }\r
   } else {\r
     //\r
     // Generate Tsr for Tunnel mode.\r
@@ -1100,6 +1197,10 @@ Ikev2AuthCertGenerator (
                    );\r
   }\r
 \r
+  if (TsiPayload == NULL || TsrPayload == NULL) {\r
+    goto CheckError;\r
+  }\r
+\r
   IKE_PACKET_APPEND_PAYLOAD (IkePacket, IdPayload);\r
   IKE_PACKET_APPEND_PAYLOAD (IkePacket, CertPayload);\r
   if (IkeSaSession->SessionCommon.IsInitiator) {\r
@@ -1117,6 +1218,49 @@ Ikev2AuthCertGenerator (
   }\r
 \r
   return IkePacket;\r
+\r
+CheckError:\r
+  if (IkePacket != NULL) {\r
+    IkePacketFree (IkePacket);\r
+  }\r
+  \r
+  if (IdPayload != NULL) {\r
+    IkePayloadFree (IdPayload);\r
+  }\r
+\r
+  if (CertPayload != NULL) {\r
+    IkePayloadFree (CertPayload);\r
+  }\r
+  \r
+  if (CertReqPayload != NULL) {\r
+    IkePayloadFree (CertReqPayload);\r
+  }\r
+\r
+  if (AuthPayload != NULL) {\r
+    IkePayloadFree (AuthPayload);\r
+  }\r
+\r
+  if (CpPayload != NULL) {\r
+    IkePayloadFree (CpPayload);\r
+  }\r
+  \r
+  if (SaPayload != NULL) {\r
+    IkePayloadFree (SaPayload);\r
+  }\r
+  \r
+  if (TsiPayload != NULL) {\r
+    IkePayloadFree (TsiPayload);\r
+  }\r
+  \r
+  if (TsrPayload != NULL) {\r
+    IkePayloadFree (TsrPayload);\r
+  }\r
+  \r
+  if (NotifyPayload != NULL) {\r
+    IkePayloadFree (NotifyPayload);\r
+  }\r
+  \r
+  return NULL; \r
 }\r
 \r
 /**\r
@@ -1340,7 +1484,11 @@ Ikev2AuthCertParser (
   //\r
   // 5. Generat keymats for IPsec protocol.\r
   //\r
-  Ikev2GenerateChildSaKeys (ChildSaSession, NULL);\r
+  Status = Ikev2GenerateChildSaKeys (ChildSaSession, NULL);\r
+  if (EFI_ERROR (Status)) {\r
+    goto Exit;\r
+  }\r
+  \r
   if (IkeSaSession->SessionCommon.IsInitiator) {\r
     //\r
     // 6. Change the state of IkeSaSession\r
@@ -1541,7 +1689,10 @@ Ikev2GenerateSaKeys (
   //\r
   // Generate Gxy\r
   //\r
-  Ikev2GenerateSaDhComputeKey (IkeSaSession->IkeKeys->DhBuffer, KePayload);\r
+  Status = Ikev2GenerateSaDhComputeKey (IkeSaSession->IkeKeys->DhBuffer, KePayload);\r
+  if (EFI_ERROR (Status)) {\r
+    goto Exit;\r
+  }\r
 \r
   //\r
   // Get the key length of Authenticaion, Encryption, PRF, and Integrity.\r
@@ -1843,7 +1994,11 @@ Ikev2GenerateChildSaKeys (
     //\r
     // Generate Gxy \r
     //\r
-    Ikev2GenerateSaDhComputeKey (ChildSaSession->DhBuffer, KePayload);\r
+    Status = Ikev2GenerateSaDhComputeKey (ChildSaSession->DhBuffer, KePayload);\r
+    if (EFI_ERROR (Status)) {\r
+      goto Exit;\r
+    }\r
+    \r
     Fragments[0].Data     = ChildSaSession->DhBuffer->GxyBuffer;\r
     Fragments[0].DataSize = ChildSaSession->DhBuffer->GxySize;\r
   }\r