blob: 3990d82c55002b7133cb8bbd7a05b0105483a1f6 [file] [log] [blame]
From dc3f134436ad6852f1bad9542232e84166843a7e Mon Sep 17 00:00:00 2001
From: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>
Date: Mon, 20 Dec 2021 20:01:10 +0000
Subject: [PATCH] Add invalid parameter check in getNextVariableName()
This patch resolves the failing tests in SCT related to
getNextVariableName() function. The existing implementation is
missing few cases where error codes are returned when called
with certain paramters. These conditions are implemented in
this patch based on the explanation provided in uefi spec.
Upstream-Status: Pending [Not submitted to upstream yet]
Signed-off-by: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>
---
.../smm_variable/backend/uefi_variable_store.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/components/service/smm_variable/backend/uefi_variable_store.c b/components/service/smm_variable/backend/uefi_variable_store.c
index a1671074..a57b3346 100644
--- a/components/service/smm_variable/backend/uefi_variable_store.c
+++ b/components/service/smm_variable/backend/uefi_variable_store.c
@@ -161,7 +161,7 @@ efi_status_t uefi_variable_store_set_variable(
bool should_sync_index = false;
if (status != EFI_SUCCESS) return status;
-
+
/*
* Runtime access to a data variable implies boot service access. Attributes that have
* EFI_VARIABLE_RUNTIME_ACCESS set must also have EFI_VARIABLE_BOOTSERVICE_ACCESS set.
@@ -310,6 +310,22 @@ efi_status_t uefi_variable_store_get_next_variable_name(
status = EFI_NOT_FOUND;
*total_length = 0;
+ /*
+ * If input values of VariableName and VendorGuid are not a name and GUID of an
+ * existing variable, EFI_INVALID_PARAMETER is returned.
+ */
+ if (cur->NameSize >= sizeof(int16_t)) {
+ /*
+ * Name must be at least one character long to accommodate
+ * the mandatory null terminator.
+ */
+ if (cur->Name[0] != 0) {
+ const struct variable_info *var_info = variable_index_find(&context->variable_index,&cur->Guid,cur->NameSize,cur->Name);
+ if(var_info == NULL)
+ return EFI_INVALID_PARAMETER;
+ }
+ }
+
const struct variable_info *info = variable_index_find_next(
&context->variable_index,
&cur->Guid,