summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/Variable/Pei
diff options
context:
space:
mode:
authoreric_tian <eric_tian@6f19259b-4bc3-4df7-8a09-765794883524>2009-03-19 08:50:41 +0000
committereric_tian <eric_tian@6f19259b-4bc3-4df7-8a09-765794883524>2009-03-19 08:50:41 +0000
commitfba0ee1f4cfd80ae2ac2ae5b82a01a17c72dfef5 (patch)
treee2103b23a0e7f15ea4abf32b34898f27fe867223 /MdeModulePkg/Universal/Variable/Pei
parentf7796c71c52d686034fffa3a7480cbdbb69ae531 (diff)
downloadedk2-fba0ee1f4cfd80ae2ac2ae5b82a01a17c72dfef5.zip
edk2-fba0ee1f4cfd80ae2ac2ae5b82a01a17c72dfef5.tar.gz
edk2-fba0ee1f4cfd80ae2ac2ae5b82a01a17c72dfef5.tar.bz2
Fix tracker 202216:linux runtime test issue.
[Root Cause] The root cause is that in FindVariable function, original code logic will traverse all variable stored in variable volatile/non-volatile area. If the non-variable area is full and Linux sets a new variable, the caller of GetNextVariablePtr will get the address of next memory block, but this block doesn't be reserved as RUNTIME attribute. Therefore its corresponding page translation table doesn't exist and causes linux kernel panic. Note that, Variable Pei driver has not such issue as the flash area is accessed in pre-os environment.All page table entries are filled. The access to next memory block will not cause such issue. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7910 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/Variable/Pei')
-rw-r--r--MdeModulePkg/Universal/Variable/Pei/Variable.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/MdeModulePkg/Universal/Variable/Pei/Variable.c b/MdeModulePkg/Universal/Variable/Pei/Variable.c
index 7f4b4f6..39998f5 100644
--- a/MdeModulePkg/Universal/Variable/Pei/Variable.c
+++ b/MdeModulePkg/Universal/Variable/Pei/Variable.c
@@ -442,7 +442,7 @@ FindVariable (
PtrTrack->StartPtr = IndexTable->StartPtr;
PtrTrack->EndPtr = IndexTable->EndPtr;
- while (IsValidVariableHeader (Variable) && (Variable <= IndexTable->EndPtr)) {
+ while ((Variable < IndexTable->EndPtr) && IsValidVariableHeader (Variable)) {
if (Variable->State == VAR_ADDED) {
//
// Record Variable in VariableIndex HOB