From: Marco Felsch <m.felsch@pengutronix.de>
To: barebox@lists.infradead.org
Subject: [PATCH v3 1/3] keytoc: mark keyspec user input as readonly
Date: Mon, 18 Aug 2025 19:08:13 +0200 [thread overview]
Message-ID: <20250818170815.2478554-1-m.felsch@pengutronix.de> (raw)
Don't manipulate the user input and intead allocate the keyname and path
always to drop the usage of freep. Move the keyspec parsing code into a
helper to increase the readability further while on it.
This prepares keytoc handle a keyspec provided by a single environment
variable.
Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
---
Changelog:
v3:
- no changes
v2:
- new patch
scripts/keytoc.c | 54 +++++++++++++++++++++++++++++++++---------------
1 file changed, 37 insertions(+), 17 deletions(-)
diff --git a/scripts/keytoc.c b/scripts/keytoc.c
index c92465707f65..617317d6607e 100644
--- a/scripts/keytoc.c
+++ b/scripts/keytoc.c
@@ -653,6 +653,34 @@ static int gen_key(const char *keyname, const char *path)
return ret;
}
+static void get_name_path(const char *keyspec, char **keyname, char **path)
+{
+ char *sep, *spec;
+
+ spec = strdup(keyspec);
+ if (!spec)
+ enomem_exit(__func__);
+
+ /* Split <key-hint>:<key-path> pair, <key-hint> is optional */
+ sep = strchr(spec, ':');
+ if (!sep) {
+ *path = spec;
+ return;
+ }
+
+ *sep = 0;
+ *keyname = strdup(spec);
+ if (!*keyname)
+ enomem_exit(__func__);
+
+ sep++;
+ *path = strdup(sep);
+ if (!*path)
+ enomem_exit(__func__);
+
+ free(spec);
+}
+
int main(int argc, char *argv[])
{
int i, opt, ret;
@@ -705,35 +733,27 @@ int main(int argc, char *argv[])
}
for (i = optind; i < argc; i++) {
- char *keyspec = argv[i];
+ const char *keyspec = argv[i];
char *keyname = NULL;
- char *path, *freep = NULL;
+ char *path = NULL;
- if (!strncmp(keyspec, "pkcs11:", 7)) {
- path = keyspec;
- } else {
- path = strchr(keyspec, ':');
- if (path) {
- *path = 0;
- path++;
- keyname = keyspec;
- } else {
- path = keyspec;
- }
- }
+ if (!strncmp(keyspec, "pkcs11:", 7))
+ path = strdup(keyspec);
+ else
+ get_name_path(keyspec, &keyname, &path);
if (!keyname) {
- ret = asprintf(&freep, "key_%d", keynum++);
+ ret = asprintf(&keyname, "key_%d", keynum++);
if (ret < 0)
enomem_exit("asprintf");
- keyname = freep;
}
ret = gen_key(keyname, path);
if (ret)
exit(1);
- free(freep);
+ free(keyname);
+ free(path);
}
if (dts) {
--
2.39.5
next reply other threads:[~2025-08-18 17:40 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-18 17:08 Marco Felsch [this message]
2025-08-18 17:08 ` [PATCH v3 2/3] keytoc: add support to handle single env keyspec Marco Felsch
2025-08-18 17:08 ` [PATCH v3 3/3] crypto: add examples to CRYPTO_PUBLIC_KEYS Marco Felsch
2025-08-19 6:04 ` [PATCH v3 1/3] keytoc: mark keyspec user input as readonly Sascha Hauer
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=20250818170815.2478554-1-m.felsch@pengutronix.de \
--to=m.felsch@pengutronix.de \
--cc=barebox@lists.infradead.org \
/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