summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2017-03-02 13:52:54 +0200
committerKyösti Mälkki <kyosti.malkki@gmail.com>2017-03-09 12:45:49 +0100
commitbfa72ce23b4c3b2a5515a820c1fe1b747e4c0449 (patch)
tree31c884501174a0ffeeb5c1aa5f590ab0a677f86c
parent49b4a8932349e01ed65e2528e82ea0dfa25410e1 (diff)
downloadcoreboot-bfa72ce23b4c3b2a5515a820c1fe1b747e4c0449.tar.xz
AGESA: Make eventlog more tolerant to failures
We have been forced to build AGESA with ASSERT() as non-fatal for some board, as hitting those errors is not uncommon. For the cases touched here, abort eventlog operations early to avoid further errors and dereference of null pointers. Change-Id: I1a09ad55d998502ad19273cfcd8d6588d85d5e0c Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/18543 Tested-by: build bot (Jenkins) Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com>
-rw-r--r--src/vendorcode/amd/agesa/f10/Proc/CPU/cpuEventLog.c9
-rw-r--r--src/vendorcode/amd/agesa/f12/Proc/CPU/cpuEventLog.c9
-rw-r--r--src/vendorcode/amd/agesa/f14/Proc/CPU/cpuEventLog.c9
-rw-r--r--src/vendorcode/amd/agesa/f15/Proc/CPU/cpuEventLog.c9
-rw-r--r--src/vendorcode/amd/agesa/f15tn/Proc/CPU/cpuEventLog.c9
-rw-r--r--src/vendorcode/amd/agesa/f16kb/Proc/CPU/cpuEventLog.c9
6 files changed, 54 insertions, 0 deletions
diff --git a/src/vendorcode/amd/agesa/f10/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f10/Proc/CPU/cpuEventLog.c
index 4c70418eb6..efb3f93519 100644
--- a/src/vendorcode/amd/agesa/f10/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f10/Proc/CPU/cpuEventLog.c
@@ -117,6 +117,8 @@ AmdReadEventLog (
ASSERT (Event != NULL);
Status = GetEventLog (&LogEvent, &Event->StdHeader);
+ if (Status != AGESA_SUCCESS)
+ return Status;
Event->EventClass = LogEvent.EventClass;
Event->EventInfo = LogEvent.EventInfo;
@@ -205,6 +207,9 @@ PutEventLog (
AgesaEventAlloc = NULL;
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return;
+
Index = AgesaEventAlloc->WriteRecordPtr;
// Add the new event log data into a circular buffer
@@ -267,6 +272,8 @@ GetEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return AGESA_BOUNDS_CHK;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -324,6 +331,8 @@ PeekEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return FALSE;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {
diff --git a/src/vendorcode/amd/agesa/f12/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f12/Proc/CPU/cpuEventLog.c
index 7df57641e1..1beb48eb1d 100644
--- a/src/vendorcode/amd/agesa/f12/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f12/Proc/CPU/cpuEventLog.c
@@ -121,6 +121,8 @@ AmdReadEventLog (
ASSERT (Event != NULL);
Event->StdHeader.HeapBasePtr = HeapGetBaseAddress (&Event->StdHeader);
Status = GetEventLog (&LogEvent, &Event->StdHeader);
+ if (Status != AGESA_SUCCESS)
+ return Status;
Event->EventClass = LogEvent.EventClass;
Event->EventInfo = LogEvent.EventInfo;
@@ -219,6 +221,9 @@ PutEventLog (
AgesaEventAlloc = NULL;
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return;
+
Index = AgesaEventAlloc->WriteRecordPtr;
// Add the new event log data into a circular buffer
@@ -281,6 +286,8 @@ GetEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return AGESA_BOUNDS_CHK;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -338,6 +345,8 @@ PeekEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return FALSE;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {
diff --git a/src/vendorcode/amd/agesa/f14/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f14/Proc/CPU/cpuEventLog.c
index 74a72a914e..841c39f815 100644
--- a/src/vendorcode/amd/agesa/f14/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f14/Proc/CPU/cpuEventLog.c
@@ -124,6 +124,8 @@ AmdReadEventLog (
ASSERT (Event != NULL);
Event->StdHeader.HeapBasePtr = HeapGetBaseAddress (&Event->StdHeader);
Status = GetEventLog (&LogEvent, &Event->StdHeader);
+ if (Status != AGESA_SUCCESS)
+ return Status;
Event->EventClass = LogEvent.EventClass;
Event->EventInfo = LogEvent.EventInfo;
@@ -222,6 +224,9 @@ PutEventLog (
AgesaEventAlloc = NULL;
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return;
+
Index = AgesaEventAlloc->WriteRecordPtr;
// Add the new event log data into a circular buffer
@@ -284,6 +289,8 @@ GetEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return AGESA_BOUNDS_CHK;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -341,6 +348,8 @@ PeekEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return FALSE;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {
diff --git a/src/vendorcode/amd/agesa/f15/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f15/Proc/CPU/cpuEventLog.c
index 1810764431..06346576b7 100644
--- a/src/vendorcode/amd/agesa/f15/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f15/Proc/CPU/cpuEventLog.c
@@ -122,6 +122,8 @@ AmdReadEventLog (
ASSERT (Event != NULL);
Event->StdHeader.HeapBasePtr = HeapGetBaseAddress (&Event->StdHeader);
Status = GetEventLog (&LogEvent, &Event->StdHeader);
+ if (Status != AGESA_SUCCESS)
+ return Status;
Event->EventClass = LogEvent.EventClass;
Event->EventInfo = LogEvent.EventInfo;
@@ -220,6 +222,9 @@ PutEventLog (
AgesaEventAlloc = NULL;
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return;
+
Index = AgesaEventAlloc->WriteRecordPtr;
// Add the new event log data into a circular buffer
@@ -282,6 +287,8 @@ GetEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return AGESA_BOUNDS_CHK;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -339,6 +346,8 @@ PeekEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return FALSE;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {
diff --git a/src/vendorcode/amd/agesa/f15tn/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f15tn/Proc/CPU/cpuEventLog.c
index 169de7d8f8..b0f0e419f3 100644
--- a/src/vendorcode/amd/agesa/f15tn/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f15tn/Proc/CPU/cpuEventLog.c
@@ -121,6 +121,8 @@ AmdReadEventLog (
ASSERT (Event != NULL);
Event->StdHeader.HeapBasePtr = HeapGetBaseAddress (&Event->StdHeader);
Status = GetEventLog (&LogEvent, &Event->StdHeader);
+ if (Status != AGESA_SUCCESS)
+ return Status;
Event->EventClass = LogEvent.EventClass;
Event->EventInfo = LogEvent.EventInfo;
@@ -219,6 +221,9 @@ PutEventLog (
AgesaEventAlloc = NULL;
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return;
+
Index = AgesaEventAlloc->WriteRecordPtr;
// Add the new event log data into a circular buffer
@@ -281,6 +286,8 @@ GetEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return AGESA_BOUNDS_CHK;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -338,6 +345,8 @@ PeekEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return FALSE;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {
diff --git a/src/vendorcode/amd/agesa/f16kb/Proc/CPU/cpuEventLog.c b/src/vendorcode/amd/agesa/f16kb/Proc/CPU/cpuEventLog.c
index ad3fa397be..f591e8a5a6 100644
--- a/src/vendorcode/amd/agesa/f16kb/Proc/CPU/cpuEventLog.c
+++ b/src/vendorcode/amd/agesa/f16kb/Proc/CPU/cpuEventLog.c
@@ -121,6 +121,8 @@ AmdReadEventLog (
ASSERT (Event != NULL);
Event->StdHeader.HeapBasePtr = HeapGetBaseAddress (&Event->StdHeader);
Status = GetEventLog (&LogEvent, &Event->StdHeader);
+ if (Status != AGESA_SUCCESS)
+ return Status;
Event->EventClass = LogEvent.EventClass;
Event->EventInfo = LogEvent.EventInfo;
@@ -219,6 +221,9 @@ PutEventLog (
AgesaEventAlloc = NULL;
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return;
+
Index = AgesaEventAlloc->WriteRecordPtr;
// Add the new event log data into a circular buffer
@@ -281,6 +286,8 @@ GetEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return AGESA_BOUNDS_CHK;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {
@@ -338,6 +345,8 @@ PeekEventLog (
GetEventLogHeapPointer (&AgesaEventAlloc, StdHeader);
ASSERT (AgesaEventAlloc != NULL);
+ if (AgesaEventAlloc == NULL)
+ return FALSE;
if ((AgesaEventAlloc->ReadRecordPtr == AgesaEventAlloc->WriteRecordPtr) &&
(AgesaEventAlloc->ReadWriteFlag == 1)) {