]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
UefiCpuPkg: Check invalid RegisterCpuFeature parameter
[mirror_edk2.git] / UefiCpuPkg / Library / RegisterCpuFeaturesLib / RegisterCpuFeaturesLib.c
index dd6a82be7a5a1c2a2cf1c2e1b0475c496adcc8e6..6ec26e1e92a1de0c220add8fcd627ede4e4bb5f9 100644 (file)
@@ -80,6 +80,34 @@ DumpCpuFeature (
   }\r
 }\r
 \r
+/**\r
+  Determines if the CPU feature is valid.\r
+\r
+  @param[in]  Feature        Pointer to CPU feature\r
+\r
+  @retval TRUE  The CPU feature is valid.\r
+  @retval FALSE The CPU feature is invalid.\r
+**/\r
+BOOLEAN\r
+RegisterCpuFeatureLibIsFeatureValid (\r
+  IN UINT32        Feature\r
+  )\r
+{\r
+  UINT32      Data;\r
+\r
+  Data = Feature;\r
+  Data &= ~(CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER | CPU_FEATURE_BEFORE_ALL | CPU_FEATURE_AFTER_ALL);\r
+  //\r
+  // Currently, CPU_FEATURE_PROC_TRACE is the MAX feature we support.\r
+  // If you define a feature bigger than it, please replace it at below.\r
+  //\r
+  if (Data > CPU_FEATURE_PROC_TRACE) {\r
+    DEBUG ((DEBUG_ERROR, "Invalid CPU feature: 0x%x ", Feature));\r
+    return FALSE;\r
+  }\r
+  return TRUE;\r
+}\r
+\r
 /**\r
   Determines if the feature bit mask is in dependent CPU feature bit mask buffer.\r
 \r
@@ -444,6 +472,7 @@ RegisterCpuFeature (
 \r
   VA_START (Marker, InitializeFunc);\r
   Feature = VA_ARG (Marker, UINT32);\r
+  ASSERT (RegisterCpuFeatureLibIsFeatureValid(Feature));\r
   while (Feature != CPU_FEATURE_END) {\r
     ASSERT ((Feature & (CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER))\r
                     != (CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER));\r