U-Boot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Vincent Stehlé" <vincent.stehle@arm.com>
To: u-boot@lists.denx.de
Cc: "Heinrich Schuchardt" <xypron.glpk@gmx.de>,
	"Ilias Apalodimas" <ilias.apalodimas@linaro.org>,
	"Tom Rini" <trini@konsulko.com>,
	"AKASHI Takahiro" <akashi.tkhro@gmail.com>,
	"Vincent Stehlé" <vincent.stehle@arm.com>
Subject: [PATCH 2/2] efi_selftest: test hii keyboard layouts more
Date: Tue, 12 May 2026 19:40:34 +0200	[thread overview]
Message-ID: <20260512-layout-pointer-v1-2-c0981e907274@arm.com> (raw)
In-Reply-To: <20260512-layout-pointer-v1-0-c0981e907274@arm.com>

The HII database test for keyboard layouts register two package lists with
two keyboard layouts each, but the test verifies only the GUID of the first
keyboard layout.
This does not catch the bugs happening with the keyboard layouts after the
first one in a package.

Verify all the keyboard layout GUIDs in the unit test to prevent this.

Signed-off-by: Vincent Stehlé <vincent.stehle@arm.com>
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Cc: Tom Rini <trini@konsulko.com>
---
 lib/efi_selftest/efi_selftest_hii.c      | 67 ++++++++++++++++++--------------
 lib/efi_selftest/efi_selftest_hii_data.c | 12 ++++++
 2 files changed, 49 insertions(+), 30 deletions(-)

diff --git a/lib/efi_selftest/efi_selftest_hii.c b/lib/efi_selftest/efi_selftest_hii.c
index 228dc296950..fdbb08fb417 100644
--- a/lib/efi_selftest/efi_selftest_hii.c
+++ b/lib/efi_selftest/efi_selftest_hii.c
@@ -452,8 +452,7 @@ out:
  * test_hii_database_get_keyboard_layout() - test retrieval of keyboard layout
  *
  * This test adds two package lists, each of which has two keyboard layouts
- * and then tries to get a handle to keyboard layout with a specific guid
- * and the current one.
+ * and then tries to get a handle to every keyboard layout and the current one.
  *
  * @Return:     status code
  */
@@ -463,7 +462,11 @@ static int test_hii_database_get_keyboard_layout(void)
 	struct efi_hii_keyboard_layout *kb_layout;
 	u16 kb_layout_size;
 	efi_status_t ret;
-	int result = EFI_ST_FAILURE;
+	int result = EFI_ST_FAILURE, i;
+	static efi_guid_t *const kb_layout_guids[] = {
+		&kb_layout_guid11, &kb_layout_guid12,
+		&kb_layout_guid21, &kb_layout_guid22
+	};
 
 	PRINT_TESTNAME;
 	ret = hii_database_protocol->new_package_list(hii_database_protocol,
@@ -484,33 +487,37 @@ static int test_hii_database_get_keyboard_layout(void)
 		goto out;
 	}
 
-	/* specific keyboard_layout(guid11) */
-	kb_layout = NULL;
-	kb_layout_size = 0;
-	ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
-			&kb_layout_guid11, &kb_layout_size, kb_layout);
-	if (ret != EFI_BUFFER_TOO_SMALL) {
-		efi_st_error("get_keyboard_layout returned %u\n",
-			     (unsigned int)ret);
-		goto out;
-	}
-	ret = boottime->allocate_pool(EFI_LOADER_DATA, kb_layout_size,
-				      (void **)&kb_layout);
-	if (ret != EFI_SUCCESS) {
-		efi_st_error("AllocatePool failed\n");
-		goto out;
-	}
-	ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
-			&kb_layout_guid11, &kb_layout_size, kb_layout);
-	if (ret != EFI_SUCCESS) {
-		efi_st_error("get_keyboard_layout returned %u\n",
-			     (unsigned int)ret);
-		goto out;
-	}
-	ret = boottime->free_pool(kb_layout);
-	if (ret != EFI_SUCCESS) {
-		efi_st_error("FreePool failed\n");
-		goto out;
+	/* Verify all keyboard layouts */
+	for (i = 0; i < ARRAY_SIZE(kb_layout_guids); i++) {
+		efi_guid_t *kb_layout_guid = kb_layout_guids[i];
+
+		kb_layout = NULL;
+		kb_layout_size = 0;
+		ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
+				kb_layout_guid, &kb_layout_size, kb_layout);
+		if (ret != EFI_BUFFER_TOO_SMALL) {
+			efi_st_error("get_keyboard_layout returned %u\n",
+				     (unsigned int)ret);
+			goto out;
+		}
+		ret = boottime->allocate_pool(EFI_LOADER_DATA, kb_layout_size,
+					      (void **)&kb_layout);
+		if (ret != EFI_SUCCESS) {
+			efi_st_error("AllocatePool failed\n");
+			goto out;
+		}
+		ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
+				kb_layout_guid, &kb_layout_size, kb_layout);
+		if (ret != EFI_SUCCESS) {
+			efi_st_error("get_keyboard_layout returned %u\n",
+				     (unsigned int)ret);
+			goto out;
+		}
+		ret = boottime->free_pool(kb_layout);
+		if (ret != EFI_SUCCESS) {
+			efi_st_error("FreePool failed\n");
+			goto out;
+		}
 	}
 
 	/* current */
diff --git a/lib/efi_selftest/efi_selftest_hii_data.c b/lib/efi_selftest/efi_selftest_hii_data.c
index 5fc890112b4..2d29bb045d3 100644
--- a/lib/efi_selftest/efi_selftest_hii_data.c
+++ b/lib/efi_selftest/efi_selftest_hii_data.c
@@ -428,6 +428,18 @@ static efi_guid_t kb_layout_guid11 =
 	EFI_GUID(0x8d40e495, 0xe2aa, 0x4c6f,
 		 0x89, 0x70, 0x68, 0x85, 0x09, 0xee, 0xc7, 0xd2);
 
+static efi_guid_t kb_layout_guid12 =
+	EFI_GUID(0x2ae60b3e, 0xb9d6, 0x49d8,
+		 0x9a, 0x16, 0xc2, 0x48, 0xf1, 0xeb, 0xa8, 0xdb);
+
+static efi_guid_t kb_layout_guid21 =
+	EFI_GUID(0xe0f56a1f, 0xdf6b, 0x4a7e,
+		 0xa3, 0x9a, 0xe7, 0xa5, 0x19, 0x15, 0x45, 0xd6);
+
+static efi_guid_t kb_layout_guid22 =
+	EFI_GUID(0x47be6ac9, 0x54cc, 0x46f9,
+		 0xa2, 0x62, 0xd5, 0x3b, 0x25, 0x6a, 0x0c, 0x34);
+
 static efi_guid_t package_guid =
 	EFI_GUID(0x0387c95a, 0xd703, 0x2346,
 		 0xb2, 0xab, 0xd0, 0xc7, 0xdd, 0x90, 0x44, 0xf8);

-- 
2.53.0


  parent reply	other threads:[~2026-05-12 17:41 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-12 17:40 [PATCH 0/2] efi: fix and test hii keyboard layout pointer computation Vincent Stehlé
2026-05-12 17:40 ` [PATCH 1/2] efi_loader: fix " Vincent Stehlé
2026-05-12 17:40 ` Vincent Stehlé [this message]
2026-05-12 19:05 ` [PATCH 0/2] efi: fix and test " Heinrich Schuchardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260512-layout-pointer-v1-2-c0981e907274@arm.com \
    --to=vincent.stehle@arm.com \
    --cc=akashi.tkhro@gmail.com \
    --cc=ilias.apalodimas@linaro.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    --cc=xypron.glpk@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox