[PATCH] efi_loader: Bump the number of shared pages with StandAloneMM

Ilias Apalodimas ilias.apalodimas at linaro.org
Wed Dec 15 08:50:00 CET 2021


Currently we allow (and explicitly check) a single shared page with
StandAloneMM.  This is dictated by OP-TEE which runs the application.
However there's no way for us dynamically discover the number of pages we
are allowed to use.  Since writing big EFI signature list variables
requires more than a page, OP-TEE has bumped the number of shared pages to
four.  Bump our page checks to four as well.

Note here that checking some kind of version and reason with the
compatibility doesn't make too much sense.  We sanitize the number of pages
internally in our U-Boot code but eventually OP-TEE will fail if we try to
write more than it's allowing. The error will just happen later on when we
access StandAloneMM.  So in order to avoid compatibility checks change the
number to four unconditionally.

Signed-off-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
Tested-by: Ying-Chun Liu (PaulLiu) <paul.liu at linaro.org>
---
 lib/efi_loader/efi_variable_tee.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/efi_loader/efi_variable_tee.c b/lib/efi_loader/efi_variable_tee.c
index 281f886124af..95eaeaa5fd9d 100644
--- a/lib/efi_loader/efi_variable_tee.c
+++ b/lib/efi_loader/efi_variable_tee.c
@@ -261,8 +261,8 @@ efi_status_t EFIAPI get_max_payload(efi_uintn_t *size)
 	 * with StMM. Since OP-TEE will reject to map anything bigger than that,
 	 * make sure we are in bounds.
 	 */
-	if (*size > OPTEE_PAGE_SIZE)
-		*size = OPTEE_PAGE_SIZE - MM_COMMUNICATE_HEADER_SIZE  -
+	if (*size > 4 * OPTEE_PAGE_SIZE)
+		*size = 4 * OPTEE_PAGE_SIZE - MM_COMMUNICATE_HEADER_SIZE  -
 			MM_VARIABLE_COMMUNICATE_SIZE;
 	/*
 	 * There seems to be a bug in EDK2 miscalculating the boundaries and
-- 
2.30.2



More information about the U-Boot mailing list