]> 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
 /** @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
 \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
 \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
 \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
   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
     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
   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
     UnicodeStrToAsciiStr (ValueStr, AsciiStr);\r
     CopyMem ((*Data)->AlgoInfo.EspAlgoInfo.AuthKey, AsciiStr, AuthKeyLength);\r
     FreePool (AsciiStr);\r
@@ -913,7 +915,7 @@ CreateSadEntry (
   }\r
 \r
   //\r
   }\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
   //\r
   ValueStr = ShellCommandLineGetValue (ParamPackage, L"--tunnel-source");\r
   if (ValueStr != NULL) {\r
@@ -934,10 +936,28 @@ CreateSadEntry (
       *Mask |= SOURCE;\r
     }\r
   }\r
       *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
   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
       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
         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
         );\r
       ReturnStatus = EFI_INVALID_PARAMETER;\r
     } else {\r
@@ -974,7 +994,7 @@ CreateSadEntry (
           ReturnStatus = EFI_INVALID_PARAMETER;\r
         }\r
       } else {\r
           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
           ShellPrintHiiEx (\r
             -1,\r
             -1,\r
@@ -982,7 +1002,7 @@ CreateSadEntry (
             STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_PARAMETER),\r
             mHiiHandle,\r
             mAppName,\r
             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
             );\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
             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
         }\r
       }\r
     }\r