All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sughosh Ganu <sughosh.ganu@linaro.org>
To: u-boot@lists.denx.de
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>,
	Ilias Apalodimas <ilias.apalodimas@linaro.org>,
	AKASHI Takahiro <takahiro.akashi@linaro.org>,
	Ying-Chun Liu <paul.liu@linaro.org>,
	Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>,
	Heiko Thiery <heiko.thiery@gmail.com>,
	Frieder Schrempf <frieder.schrempf@kontron.de>,
	Michael Walle <michael@walle.cc>,
	Masami Hiramatsu <masami.hiramatsu@linaro.org>,
	Jassi Brar <jaswinder.singh@linaro.org>,
	Michal Simek <monstr@monstr.eu>,
	Michal Simek <michal.simek@xilinx.com>,
	Sughosh Ganu <sughosh.ganu@linaro.org>
Subject: [PATCH v6 3/8] capsule: Put a check for image index before the update
Date: Tue, 12 Apr 2022 18:34:42 +0530	[thread overview]
Message-ID: <20220412130447.300574-4-sughosh.ganu@linaro.org> (raw)
In-Reply-To: <20220412130447.300574-1-sughosh.ganu@linaro.org>

The current capsule update code compares the image GUID value in the
capsule header with the image GUID value obtained from the
GetImageInfo function of the Firmware Management Protocol(FMP). This
comparison is done to ascertain if the FMP's SetImage function can be
called for the update. Make this checking more robust by comparing the
image_index value passed through the capsule with that returned by the
FMP's GetImageInfo function. This protects against the scenario of the
firmware being updated in a wrong partition/location on the storage
device if an incorrect value has been passed through the capsule,
since the image_index is used to determine the location of the update
on the storage device.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Reviewed-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
---

Changes since V5: None

 lib/efi_loader/efi_capsule.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
index a107f285dd..c76a5f3570 100644
--- a/lib/efi_loader/efi_capsule.c
+++ b/lib/efi_loader/efi_capsule.c
@@ -129,6 +129,7 @@ void set_capsule_result(int index, struct efi_capsule_header *capsule,
 /**
  * efi_fmp_find - search for Firmware Management Protocol drivers
  * @image_type:		Image type guid
+ * @image_index:	Image Index
  * @instance:		Instance number
  * @handles:		Handles of FMP drivers
  * @no_handles:		Number of handles
@@ -142,8 +143,8 @@ void set_capsule_result(int index, struct efi_capsule_header *capsule,
  * * NULL		- on failure
  */
 static struct efi_firmware_management_protocol *
-efi_fmp_find(efi_guid_t *image_type, u64 instance, efi_handle_t *handles,
-	     efi_uintn_t no_handles)
+efi_fmp_find(efi_guid_t *image_type, u8 image_index, u64 instance,
+	     efi_handle_t *handles, efi_uintn_t no_handles)
 {
 	efi_handle_t *handle;
 	struct efi_firmware_management_protocol *fmp;
@@ -204,6 +205,7 @@ efi_fmp_find(efi_guid_t *image_type, u64 instance, efi_handle_t *handles,
 			log_debug("+++ desc[%d] index: %d, name: %ls\n",
 				  j, desc->image_index, desc->image_id_name);
 			if (!guidcmp(&desc->image_type_id, image_type) &&
+			    (desc->image_index == image_index) &&
 			    (!instance ||
 			     !desc->hardware_instance ||
 			      desc->hardware_instance == instance))
@@ -450,8 +452,8 @@ static efi_status_t efi_capsule_update_firmware(
 		}
 
 		/* find a device for update firmware */
-		/* TODO: should we pass index as well, or nothing but type? */
 		fmp = efi_fmp_find(&image->update_image_type_id,
+				   image->update_image_index,
 				   image->update_hardware_instance,
 				   handles, no_handles);
 		if (!fmp) {
-- 
2.25.1


  parent reply	other threads:[~2022-04-12 13:06 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-12 13:04 [PATCH v6 0/8] efi: capsule: Capsule Update fixes and enhancements Sughosh Ganu
2022-04-12 13:04 ` [PATCH v6 1/8] capsule: board: Add information needed for capsule updates Sughosh Ganu
2022-04-12 13:04 ` [PATCH v6 2/8] capsule: FMP: Populate the image descriptor array from platform data Sughosh Ganu
2022-04-12 13:04 ` Sughosh Ganu [this message]
2022-04-12 13:04 ` [PATCH v6 4/8] efi: Define set_dfu_alt_info() for boards with UEFI capsule update enabled Sughosh Ganu
2022-04-12 13:04 ` [PATCH v6 5/8] test: capsule: Modify the capsule tests to use GUID values for sandbox Sughosh Ganu
2022-04-13  6:35   ` AKASHI Takahiro
2022-04-13  8:29     ` Sughosh Ganu
2022-04-12 13:04 ` [PATCH v6 6/8] FMP: Remove GUIDs for FIT and raw images Sughosh Ganu
2022-04-12 13:04 ` [PATCH v6 7/8] mkeficapsule: Remove raw and FIT GUID types Sughosh Ganu
2022-04-13  6:05   ` AKASHI Takahiro
2022-04-13  6:14     ` Sughosh Ganu
2022-04-13  6:23       ` AKASHI Takahiro
2022-04-13  6:30         ` Sughosh Ganu
2022-04-13  6:44           ` AKASHI Takahiro
2022-04-12 13:04 ` [PATCH v6 8/8] doc: uefi: Update the capsule update related documentation Sughosh Ganu
2022-04-13  6:18   ` AKASHI Takahiro
2022-04-13  7:08     ` Sughosh Ganu
2022-04-13  7:33       ` AKASHI Takahiro
2022-04-13  8:11         ` Masami Hiramatsu

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=20220412130447.300574-4-sughosh.ganu@linaro.org \
    --to=sughosh.ganu@linaro.org \
    --cc=frieder.schrempf@kontron.de \
    --cc=heiko.thiery@gmail.com \
    --cc=ilias.apalodimas@linaro.org \
    --cc=jaswinder.singh@linaro.org \
    --cc=masami.hiramatsu@linaro.org \
    --cc=michael@walle.cc \
    --cc=michal.simek@xilinx.com \
    --cc=monstr@monstr.eu \
    --cc=paul.liu@linaro.org \
    --cc=takahiro.akashi@linaro.org \
    --cc=tuomas.tynkkynen@iki.fi \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.