diff options
author | Song, BinX <binx.song@intel.com> | 2017-12-13 10:35:15 +0800 |
---|---|---|
committer | Eric Dong <eric.dong@intel.com> | 2017-12-13 16:40:25 +0800 |
commit | 5c59537c1092a1372913274636a8d766fdd97e61 (patch) | |
tree | 2e5ea5e5b8e802c34ca28f291d5d9ad8585433ce | |
parent | 8a5ef41ebb3dded5e9578ff4b716b87416b9c95f (diff) | |
download | edk2-5c59537c1092a1372913274636a8d766fdd97e61.tar.gz edk2-5c59537c1092a1372913274636a8d766fdd97e61.tar.bz2 edk2-5c59537c1092a1372913274636a8d766fdd97e61.zip |
UefiCpuPkg: Check invalid RegisterCpuFeature parameter
V2:
Update function name, add more detail description.
V1:
Check and assert invalid RegisterCpuFeature function parameter
Cc: Eric Dong <eric.dong@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bell Song <binx.song@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
-rw-r--r-- | UefiCpuPkg/Include/Library/RegisterCpuFeaturesLib.h | 5 | ||||
-rw-r--r-- | UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c | 29 |
2 files changed, 34 insertions, 0 deletions
diff --git a/UefiCpuPkg/Include/Library/RegisterCpuFeaturesLib.h b/UefiCpuPkg/Include/Library/RegisterCpuFeaturesLib.h index 9331e49d13..fc3ccda1ba 100644 --- a/UefiCpuPkg/Include/Library/RegisterCpuFeaturesLib.h +++ b/UefiCpuPkg/Include/Library/RegisterCpuFeaturesLib.h @@ -71,6 +71,11 @@ #define CPU_FEATURE_APIC_TPR_UPDATE_MESSAGE (32+9)
#define CPU_FEATURE_ENERGY_PERFORMANCE_BIAS (32+10)
#define CPU_FEATURE_PPIN (32+11)
+//
+// Currently, CPU_FEATURE_PROC_TRACE is the MAX feature we support.
+// If you define a feature bigger than it, please also replace it
+// in RegisterCpuFeatureLibIsFeatureValid function.
+//
#define CPU_FEATURE_PROC_TRACE (32+12)
#define CPU_FEATURE_BEFORE_ALL BIT27
diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c index dd6a82be7a..6ec26e1e92 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c @@ -81,6 +81,34 @@ DumpCpuFeature ( }
/**
+ Determines if the CPU feature is valid.
+
+ @param[in] Feature Pointer to CPU feature
+
+ @retval TRUE The CPU feature is valid.
+ @retval FALSE The CPU feature is invalid.
+**/
+BOOLEAN
+RegisterCpuFeatureLibIsFeatureValid (
+ IN UINT32 Feature
+ )
+{
+ UINT32 Data;
+
+ Data = Feature;
+ Data &= ~(CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER | CPU_FEATURE_BEFORE_ALL | CPU_FEATURE_AFTER_ALL);
+ //
+ // Currently, CPU_FEATURE_PROC_TRACE is the MAX feature we support.
+ // If you define a feature bigger than it, please replace it at below.
+ //
+ if (Data > CPU_FEATURE_PROC_TRACE) {
+ DEBUG ((DEBUG_ERROR, "Invalid CPU feature: 0x%x ", Feature));
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
Determines if the feature bit mask is in dependent CPU feature bit mask buffer.
@param[in] FeatureMask Pointer to CPU feature bit mask
@@ -444,6 +472,7 @@ RegisterCpuFeature ( VA_START (Marker, InitializeFunc);
Feature = VA_ARG (Marker, UINT32);
+ ASSERT (RegisterCpuFeatureLibIsFeatureValid(Feature));
while (Feature != CPU_FEATURE_END) {
ASSERT ((Feature & (CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER))
!= (CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER));
|