blob: b1d400d715abc55d30f1dd26d937c1214a76ccfb [file] [log] [blame]
From a83aa9e1b8f6e312da82e54614fbca498493c34d Mon Sep 17 00:00:00 2001
From: Emekcan Aras <emekcan.aras@arm.com>
Date: Thu, 19 Oct 2023 14:56:55 +0100
Subject: [PATCH] fix runtime capsule update flags checks for corstone1000
Fixes capsule update flags checks in capsule update as these checks are missing
in the platform-specific capsule-update implementation in corstone1000.
Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
Upstream-Status: Inappropriate [Redesign of Capsule update interface is required]
---
lib/efi_loader/efi_capsule.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
index 307bcfd73c..34507482b7 100644
--- a/lib/efi_loader/efi_capsule.c
+++ b/lib/efi_loader/efi_capsule.c
@@ -854,6 +854,34 @@ efi_status_t __efi_runtime EFIAPI efi_update_capsule(
continue;
}
+ /* According to UEFI specs when the flag is CAPSULE_FLAGS_PERSIST_ACROSS_RESET,
+ ScatterGatherList can't be NULL.*/
+ if ((capsule->flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET) &&
+ scatter_gather_list == 0){
+ ret = EFI_INVALID_PARAMETER;
+ goto out;
+ }
+
+ /*According to UEFI specs a capsule which has the CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE
+ * flag must have CAPSULE_FLAGS_PERSIST_ACROSS_RESET set in its
+ * header as well.*/
+ if (capsule->flags & CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE){
+ if(!(capsule->flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET)){
+ ret = EFI_INVALID_PARAMETER;
+ goto out;
+ }
+ }
+
+ /* According to UEFI specs, a capsule which has the CAPSULE_FLAGS_INITIATE_RESET
+ * Flag must have CAPSULE_FLAGS_PERSIST_ACROSS_RESET set in its
+ * header as well.*/
+ if (capsule->flags & CAPSULE_FLAGS_INITIATE_RESET){
+ if(!(capsule->flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET)){
+ ret = EFI_INVALID_PARAMETER;
+ goto out;
+ }
+ }
+
log_debug("Capsule[%d] (guid:%pUs)\n",
i, &capsule->capsule_guid);
--
2.25.1