From: patrick.oppenlander at gmail.com <patrick.oppenlander@gmail.com>
To: u-boot@lists.denx.de
Subject: [PATCH 3/3] mkimage: fit: don't cipher ciphered data
Date: Fri, 17 Jul 2020 17:28:25 +1000 [thread overview]
Message-ID: <20200717072825.371105-3-patrick.oppenlander@gmail.com> (raw)
In-Reply-To: <20200717072825.371105-1-patrick.oppenlander@gmail.com>
From: Patrick Oppenlander <patrick.oppenlander@gmail.com>
Previously, mkimage -F could be run multiple times causing already
ciphered image data to be ciphered again.
Signed-off-by: Patrick Oppenlander <patrick.oppenlander@gmail.com>
---
tools/image-host.c | 47 +++++++++++++++++++++++++++++++---------------
1 file changed, 32 insertions(+), 15 deletions(-)
diff --git a/tools/image-host.c b/tools/image-host.c
index 87ef79ef53..12de9b5ec0 100644
--- a/tools/image-host.c
+++ b/tools/image-host.c
@@ -397,33 +397,43 @@ int fit_image_write_cipher(void *fit, int image_noffset, int noffset,
const void *data, size_t size,
unsigned char *data_ciphered, int data_ciphered_len)
{
- int ret = -1;
+ /*
+ * fit_image_cipher_data() uses the presence of the data-size-unciphered
+ * property as a sentinel to detect whether the data for this image is
+ * already encrypted. This is important as:
+ * - 'mkimage -F' can be run multiple times on a FIT image
+ * - This function is in a retry loop to handle ENOSPC
+ */
- /* add non ciphered data size */
+ int ret;
+
+ /* Add unciphered data size */
ret = fdt_setprop_u32(fit, image_noffset, "data-size-unciphered", size);
- if (ret == -FDT_ERR_NOSPACE) {
- ret = -ENOSPC;
- goto out;
- }
+ if (ret == -FDT_ERR_NOSPACE)
+ return -ENOSPC;
if (ret) {
printf("Can't add unciphered data size (err = %d)\n", ret);
- goto out;
+ return -EIO;
}
- /* Add ciphered data */
+ /* Replace contents of data property with data_ciphered */
ret = fdt_setprop(fit, image_noffset, FIT_DATA_PROP,
data_ciphered, data_ciphered_len);
if (ret == -FDT_ERR_NOSPACE) {
- ret = -ENOSPC;
- goto out;
+ /* Remove data-size-unciphered; data is not ciphered */
+ ret = fdt_delprop(fit, image_noffset, "data-size-unciphered");
+ if (ret) {
+ printf("Can't remove unciphered data size (err = %d)\n", ret);
+ return -EIO;
+ }
+ return -ENOSPC;
}
if (ret) {
- printf("Can't add ciphered data (err = %d)\n", ret);
- goto out;
+ printf("Can't replace data with ciphered data (err = %d)\n", ret);
+ return -EIO;
}
- out:
- return ret;
+ return 0;
}
static int
@@ -482,7 +492,7 @@ int fit_image_cipher_data(const char *keydir, void *keydest,
const char *image_name;
const void *data;
size_t size;
- int cipher_node_offset;
+ int cipher_node_offset, len;
/* Get image name */
image_name = fit_get_name(fit, image_noffset, NULL);
@@ -497,6 +507,13 @@ int fit_image_cipher_data(const char *keydir, void *keydest,
return -1;
}
+ /* Don't cipher ciphered data */
+ if (fdt_getprop(fit, image_noffset, "data-size-unciphered", &len))
+ return 0;
+ if (len != -FDT_ERR_NOTFOUND) {
+ printf("Failure testing for data-size-unciphered\n");
+ return -1;
+ }
/* Process cipher node if present */
cipher_node_offset = fdt_subnode_offset(fit, image_noffset, "cipher");
--
2.27.0
next prev parent reply other threads:[~2020-07-17 7:28 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-17 7:28 [PATCH 1/3] mkimage: fit: only process one cipher node patrick.oppenlander at gmail.com
2020-07-17 7:28 ` [PATCH 2/3] mkimage: fit: handle FDT_ERR_NOSPACE when ciphering patrick.oppenlander at gmail.com
2020-07-29 15:02 ` Philippe REYNES
2020-07-30 1:19 ` Patrick Oppenlander
2020-07-17 7:28 ` patrick.oppenlander at gmail.com [this message]
2020-07-29 17:17 ` [PATCH 3/3] mkimage: fit: don't cipher ciphered data Philippe REYNES
2020-07-30 1:27 ` Patrick Oppenlander
2020-07-27 23:45 ` [PATCH 1/3] mkimage: fit: only process one cipher node Simon Glass
2020-07-29 14:50 ` Philippe REYNES
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=20200717072825.371105-3-patrick.oppenlander@gmail.com \
--to=patrick.oppenlander@gmail.com \
--cc=u-boot@lists.denx.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.