]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/Application/IpsecConfig/PolicyEntryOperation.c
Add check before using it to avoid access violation.
[mirror_edk2.git] / NetworkPkg / Application / IpsecConfig / PolicyEntryOperation.c
index b50ab7e5740c563bbc6ff3a91646ecced594a746..7e04573022a49d7957d3b58216874c2d58eab3f3 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The implementation of policy entry operation function in IpSecConfig application.\r
 \r
-  Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2012, 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
@@ -25,7 +25,7 @@
 \r
   @param[out]     Selector        The pointer to the EFI_IPSEC_SPD_SELECTOR structure.\r
   @param[in]      ParamPackage    The pointer to the ParamPackage list.\r
-  @param[in, out] ParamPackage    The pointer to the Mask.\r
+  @param[in, out] Mask            The pointer to the Mask.\r
 \r
   @retval EFI_SUCCESS              Fill in EFI_IPSEC_SPD_SELECTOR successfully.\r
   @retval EFI_INVALID_PARAMETER    Invalid user input parameter.\r
@@ -784,6 +784,7 @@ CreateSadEntry (
   if (ValueStr != NULL ) {\r
     (*Data)->AlgoInfo.EspAlgoInfo.EncKeyLength = EncKeyLength;\r
     AsciiStr = AllocateZeroPool (EncKeyLength + 1);\r
+    ASSERT (AsciiStr != NULL);\r
     UnicodeStrToAsciiStr (ValueStr, AsciiStr);\r
     CopyMem ((*Data)->AlgoInfo.EspAlgoInfo.EncKey,  AsciiStr, EncKeyLength);\r
     FreePool (AsciiStr);\r
@@ -813,6 +814,7 @@ CreateSadEntry (
   if (ValueStr != NULL) {\r
     (*Data)->AlgoInfo.EspAlgoInfo.AuthKeyLength = AuthKeyLength;\r
     AsciiStr = AllocateZeroPool (AuthKeyLength + 1);\r
+    ASSERT (AsciiStr != NULL);\r
     UnicodeStrToAsciiStr (ValueStr, AsciiStr);\r
     CopyMem ((*Data)->AlgoInfo.EspAlgoInfo.AuthKey, AsciiStr, AuthKeyLength);\r
     FreePool (AsciiStr);\r
@@ -913,7 +915,7 @@ CreateSadEntry (
   }\r
 \r
   //\r
-  // Convert user imput from string to integer, and fill in the DestAddress in EFI_IPSEC_SA_ID.\r
+  // Convert user input from string to integer, and fill in the DestAddress in EFI_IPSEC_SA_ID.\r
   //\r
   ValueStr = ShellCommandLineGetValue (ParamPackage, L"--tunnel-source");\r
   if (ValueStr != NULL) {\r
@@ -934,10 +936,28 @@ CreateSadEntry (
       *Mask |= SOURCE;\r
     }\r
   }\r
+\r
+  //\r
+  // If it is TunnelMode, then check if the tunnel-source and --tunnel-dest are set\r
+  //\r
+  if ((*Data)->Mode == EfiIPsecTunnel) {\r
+    if ((*Mask & (DEST|SOURCE)) != (DEST|SOURCE)) {\r
+      ShellPrintHiiEx (\r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_ONE_OF_PARAMETERS),\r
+        mHiiHandle,\r
+        mAppName,\r
+        L"--tunnel-source --tunnel-dest"\r
+        );\r
+      ReturnStatus = EFI_INVALID_PARAMETER;\r
+    }\r
+  }\r
   ReturnStatus = CreateSpdSelector ((*Data)->SpdSelector, ParamPackage, Mask);\r
 \r
   if (CreateNew) {\r
-    if ((*Mask & (SPI | IPSEC_PROTO )) != (SPI | IPSEC_PROTO )) {\r
+    if ((*Mask & (SPI|IPSEC_PROTO|LOCAL|REMOTE)) != (SPI|IPSEC_PROTO|LOCAL|REMOTE)) {\r
       ShellPrintHiiEx (\r
         -1,\r
         -1,\r
@@ -945,7 +965,7 @@ CreateSadEntry (
         STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_ONE_OF_PARAMETERS),\r
         mHiiHandle,\r
         mAppName,\r
-        L"--spi --ipsec-proto --dest"\r
+        L"--spi --ipsec-proto --local --remote"\r
         );\r
       ReturnStatus = EFI_INVALID_PARAMETER;\r
     } else {\r
@@ -974,7 +994,7 @@ CreateSadEntry (
           ReturnStatus = EFI_INVALID_PARAMETER;\r
         }\r
       } else {\r
-        if ((*Mask & ENCRYPT_ALGO) == 0) {\r
+        if ((*Mask & (ENCRYPT_ALGO|AUTH_ALGO)) != (ENCRYPT_ALGO|AUTH_ALGO) ) {\r
           ShellPrintHiiEx (\r
             -1,\r
             -1,\r
@@ -982,7 +1002,7 @@ CreateSadEntry (
             STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_PARAMETER),\r
             mHiiHandle,\r
             mAppName,\r
-            L"--encrypt-algo"\r
+            L"--encrypt-algo --auth-algo"\r
             );\r
           ReturnStatus = EFI_INVALID_PARAMETER;\r
         } else if ((*Data)->AlgoInfo.EspAlgoInfo.EncAlgoId != IPSEC_EALG_NONE && (*Mask & ENCRYPT_KEY) == 0) {\r
@@ -996,6 +1016,17 @@ CreateSadEntry (
             L"--encrypt-key"\r
             );\r
           ReturnStatus = EFI_INVALID_PARAMETER;\r
+        } else if ((*Data)->AlgoInfo.EspAlgoInfo.AuthAlgoId != IPSEC_AALG_NONE && (*Mask & AUTH_KEY) == 0) {\r
+          ShellPrintHiiEx (\r
+            -1,\r
+            -1,\r
+            NULL,\r
+            STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_PARAMETER),\r
+            mHiiHandle,\r
+            mAppName,\r
+            L"--auth-key"\r
+            );\r
+          ReturnStatus = EFI_INVALID_PARAMETER;\r
         }\r
       }\r
     }\r