[PATCH] uefi: esrt: update the LastAttemptStatus values to UEFI spec 2.10
Ivan Hu
ivan.hu at canonical.com
Tue Jun 27 02:49:00 UTC 2023
BugLink: https://bugs.launchpad.net/fwts/+bug/2024613
The UEFI spec 2.10 now has value 0x08 for
LAST_ATTEMPT_STATUS_ERROR_UNSATISFIED_DEPENDENCIES and also allows values
in the range 0x1000 to 0x4000 to be reserved for vendor usage.
Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
---
src/lib/include/fwts_uefi.h | 20 ++++++++++++--------
src/uefi/esrt/esrt.c | 8 +++++---
2 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/src/lib/include/fwts_uefi.h b/src/lib/include/fwts_uefi.h
index e6aaa1da..612d85f7 100644
--- a/src/lib/include/fwts_uefi.h
+++ b/src/lib/include/fwts_uefi.h
@@ -113,14 +113,18 @@ enum {
#define ESRT_FW_TYPE_DEVICEFIRMWARE 0x00000002
#define ESRT_FW_TYPE_UEFIDRIVER 0x00000003
-#define LAST_ATTEMPT_STATUS_SUCCESS 0x00000000
-#define LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL 0x00000001
-#define LAST_ATTEMPT_STATUS_ERR_INSUFFICIENT_RESOURCES 0x00000002
-#define LAST_ATTEMPT_STATUS_ERR_INCORRECT_VERSION 0x00000003
-#define LAST_ATTEMPT_STATUS_ERR_INVALID_FORMAT 0x00000004
-#define LAST_ATTEMPT_STATUS_ERR_AUTH_ERROR 0x00000005
-#define LAST_ATTEMPT_STATUS_ERR_PWR_EVT_AC 0x00000006
-#define LAST_ATTEMPT_STATUS_ERR_PWR_EVT_BATT 0x00000007
+#define LAST_ATTEMPT_STATUS_SUCCESS 0x00000000
+#define LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL 0x00000001
+#define LAST_ATTEMPT_STATUS_ERR_INSUFFICIENT_RESOURCES 0x00000002
+#define LAST_ATTEMPT_STATUS_ERR_INCORRECT_VERSION 0x00000003
+#define LAST_ATTEMPT_STATUS_ERR_INVALID_FORMAT 0x00000004
+#define LAST_ATTEMPT_STATUS_ERR_AUTH_ERROR 0x00000005
+#define LAST_ATTEMPT_STATUS_ERR_PWR_EVT_AC 0x00000006
+#define LAST_ATTEMPT_STATUS_ERR_PWR_EVT_BATT 0x00000007
+#define LAST_ATTEMPT_STATUS_ERR_UNSATISFIED_DEPENDENCIES 0x00000008
+#define LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL_VENDOR_RANGE_MIN 0x00001000
+#define LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL_VENDOR_RANGE_MAX 0x00004000
+
#define EFI_RT_SUPPORTED_GET_TIME 0x0001
#define EFI_RT_SUPPORTED_SET_TIME 0x0002
diff --git a/src/uefi/esrt/esrt.c b/src/uefi/esrt/esrt.c
index 9c1d431a..d3b1db85 100644
--- a/src/uefi/esrt/esrt.c
+++ b/src/uefi/esrt/esrt.c
@@ -167,11 +167,13 @@ static void check_entries(fwts_framework *fw, bool *passed)
"Missing or failed to get LastAttemptStatus on %s.", entry->d_name);
*passed = false;
} else {
- uint32_t lastattemptst = strtoul(str, NULL, 10);
+ uint32_t lastattemptst = strtoul(str, NULL, 16);
- if (lastattemptst > LAST_ATTEMPT_STATUS_ERR_PWR_EVT_BATT) {
+ if (lastattemptst > LAST_ATTEMPT_STATUS_ERR_UNSATISFIED_DEPENDENCIES &&
+ (lastattemptst < LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL_VENDOR_RANGE_MIN ||
+ lastattemptst > LAST_ATTEMPT_STATUS_ERR_UNSUCCESSFUL_VENDOR_RANGE_MAX)) {
fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidValue",
- "The LastAttemptStatus value on %s is %" PRIu32
+ "The LastAttemptStatus value on %s is 0x%" PRIx32
", which is undefined on UEFI Spec."
, entry->d_name, lastattemptst);
*passed = false;
--
2.34.1
More information about the fwts-devel
mailing list