diff mbox series

uefi: esrt: update the LastAttemptStatus values to UEFI spec 2.10

Message ID 20230627024900.87141-1-ivan.hu@canonical.com
State Accepted
Headers show
Series uefi: esrt: update the LastAttemptStatus values to UEFI spec 2.10 | expand

Commit Message

Ivan Hu June 27, 2023, 2:49 a.m. UTC
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@canonical.com>
---
 src/lib/include/fwts_uefi.h | 20 ++++++++++++--------
 src/uefi/esrt/esrt.c        |  8 +++++---
 2 files changed, 17 insertions(+), 11 deletions(-)
diff mbox series

Patch

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;