[coreboot-gerrit] New patch to review for coreboot: 972c32d AMD IMC AGESA: Access the data in stack by correct length.

Zheng Bao (zheng.bao@amd.com) gerrit at coreboot.org
Fri Nov 29 14:29:45 CET 2013


Zheng Bao (zheng.bao at amd.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4297

-gerrit

commit 972c32d9ea77447c53874ec46c0616bd0e74503a
Author: Zheng Bao <fishbaozi at gmail.com>
Date:   Fri Nov 29 21:06:53 2013 +0800

    AMD IMC AGESA: Access the data in stack by correct length.
    
    The values of AccessWidthxx are
    { AccessWidth8 = 1,
      AccessWidth16,
      AccessWidth32,}
    For the case of AccessWidth8, we only need to access the index/data
    once. But ReadECmsg and WriteECmsg did the loop 1 more time than they
    are supposed to do. So did the 16-bit and 32-bits accessing. The data
    in stack next to "Value" will be overwritten.
    
    That is an AGESA bug. We need to push this issue back to AMD's team
    to fix that.
    
    Change-Id: I566f74c242ce93f4569eedf69ca07d2fb7fb368d
    Signed-off-by: Zheng Bao <zheng.bao at amd.com>
    Signed-off-by: Zheng Bao <fishbaozi at gmail.com>
---
 src/vendorcode/amd/agesa/f12/Proc/Fch/Imc/ImcLib.c   | 4 ++--
 src/vendorcode/amd/agesa/f15tn/Proc/Fch/Imc/ImcLib.c | 4 ++--
 src/vendorcode/amd/agesa/f16kb/Proc/Fch/Imc/ImcLib.c | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/vendorcode/amd/agesa/f12/Proc/Fch/Imc/ImcLib.c b/src/vendorcode/amd/agesa/f12/Proc/Fch/Imc/ImcLib.c
index 1a3f7dd..da85390 100644
--- a/src/vendorcode/amd/agesa/f12/Proc/Fch/Imc/ImcLib.c
+++ b/src/vendorcode/amd/agesa/f12/Proc/Fch/Imc/ImcLib.c
@@ -58,7 +58,7 @@ WriteECmsg (
   OpFlag = OpFlag & 0x7f;
   if (OpFlag == 0x02) OpFlag = 0x03;
 
-  for (Index = 0; Index <= OpFlag; Index++) {
+  for (Index = 0; Index < OpFlag; Index++) {
     /// EC_LDN9_MAILBOX_BASE_ADDRESS
     LibAmdIoWrite (AccessWidth8, 0x3E, &Address, StdHeader);
     Address++;
@@ -80,7 +80,7 @@ ReadECmsg (
   OpFlag = OpFlag & 0x7f;
   if (OpFlag == 0x02) OpFlag = 0x03;
 
-  for (Index = 0; Index <= OpFlag; Index++) {
+  for (Index = 0; Index < OpFlag; Index++) {
     /// EC_LDN9_MAILBOX_BASE_ADDRESS
     LibAmdIoWrite (AccessWidth8, 0x3E, &Address, StdHeader);
     Address++;
diff --git a/src/vendorcode/amd/agesa/f15tn/Proc/Fch/Imc/ImcLib.c b/src/vendorcode/amd/agesa/f15tn/Proc/Fch/Imc/ImcLib.c
index a451c41..10f8dfc 100644
--- a/src/vendorcode/amd/agesa/f15tn/Proc/Fch/Imc/ImcLib.c
+++ b/src/vendorcode/amd/agesa/f15tn/Proc/Fch/Imc/ImcLib.c
@@ -60,7 +60,7 @@ WriteECmsg (
     OpFlag = 0x03;
   }
 
-  for (Index = 0; Index <= OpFlag; Index++) {
+  for (Index = 0; Index < OpFlag; Index++) {
     /// EC_LDN9_MAILBOX_BASE_ADDRESS
     LibAmdIoWrite (AccessWidth8, 0x3E, &Address, StdHeader);
     Address++;
@@ -84,7 +84,7 @@ ReadECmsg (
     OpFlag = 0x03;
   }
 
-  for (Index = 0; Index <= OpFlag; Index++) {
+  for (Index = 0; Index < OpFlag; Index++) {
     /// EC_LDN9_MAILBOX_BASE_ADDRESS
     LibAmdIoWrite (AccessWidth8, 0x3E, &Address, StdHeader);
     Address++;
diff --git a/src/vendorcode/amd/agesa/f16kb/Proc/Fch/Imc/ImcLib.c b/src/vendorcode/amd/agesa/f16kb/Proc/Fch/Imc/ImcLib.c
index 05f5727..5490cf5 100644
--- a/src/vendorcode/amd/agesa/f16kb/Proc/Fch/Imc/ImcLib.c
+++ b/src/vendorcode/amd/agesa/f16kb/Proc/Fch/Imc/ImcLib.c
@@ -71,7 +71,7 @@ WriteECmsg (
     OpFlag = 0x03;
   }
 
-  for (Index = 0; Index <= OpFlag; Index++) {
+  for (Index = 0; Index < OpFlag; Index++) {
     /// EC_LDN9_MAILBOX_BASE_ADDRESS
     LibAmdIoWrite (AccessWidth8, MailBoxPort, &Address, StdHeader);
     Address++;
@@ -106,7 +106,7 @@ ReadECmsg (
     OpFlag = 0x03;
   }
 
-  for (Index = 0; Index <= OpFlag; Index++) {
+  for (Index = 0; Index < OpFlag; Index++) {
     /// EC_LDN9_MAILBOX_BASE_ADDRESS
     LibAmdIoWrite (AccessWidth8, MailBoxPort, &Address, StdHeader);
     Address++;



More information about the coreboot-gerrit mailing list