On 12/11/2017 4:16 PM, Song, BinX wrote:
Check and assert invalid RegisterCpuFeature function parameter
Cc: Eric Dong <eric.d...@intel.com>
Cc: Laszlo Ersek <ler...@redhat.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bell Song <binx.s...@intel.com>
---
.../Include/Library/RegisterCpuFeaturesLib.h | 4 ++++
.../RegisterCpuFeaturesLib.c | 28 ++++++++++++++++++++++
2 files changed, 32 insertions(+)
diff --git a/UefiCpuPkg/Include/Library/RegisterCpuFeaturesLib.h
b/UefiCpuPkg/Include/Library/RegisterCpuFeaturesLib.h
index 9331e49..54244cd 100644
--- a/UefiCpuPkg/Include/Library/RegisterCpuFeaturesLib.h
+++ b/UefiCpuPkg/Include/Library/RegisterCpuFeaturesLib.h
@@ -72,6 +72,10 @@
#define CPU_FEATURE_ENERGY_PERFORMANCE_BIAS (32+10)
#define CPU_FEATURE_PPIN (32+11)
+//
+// When you add new CPU features, please also replace the minor CPU feature
+// with the max CPU feature in the IsFeatureValidCheck() function.
+//
#define CPU_FEATURE_PROC_TRACE (32+12)
#define CPU_FEATURE_BEFORE_ALL BIT27
#define CPU_FEATURE_AFTER_ALL BIT28
diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
index dd6a82b..f75d900 100644
--- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
+++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c
@@ -81,6 +81,33 @@ 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
+IsFeatureValidCheck (
Can we rename this function name to
"RegisterCpuFeatureLibIsFeatureValid"?
+ IN UINT32 Feature
+ )
+{
+ UINT32 Data;
+
+ Data = Feature;
+ Data &= ~(CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER | CPU_FEATURE_BEFORE_ALL |
CPU_FEATURE_AFTER_ALL);
+ //
+ // Please replace CPU feature below with the MAX one if have.
Can we just say "CPU_FEATURE_PROC_TRACE" is the MAX feature we support?
+ //
+ 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 +471,7 @@ RegisterCpuFeature (
VA_START (Marker, InitializeFunc);
Feature = VA_ARG (Marker, UINT32);
+ ASSERT (IsFeatureValidCheck(Feature));
while (Feature != CPU_FEATURE_END) {
ASSERT ((Feature & (CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER))
!= (CPU_FEATURE_BEFORE | CPU_FEATURE_AFTER));
--
Thanks,
Ray
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel