summaryrefslogtreecommitdiff
path: root/util/libreboot-utils
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2026-03-29 08:09:52 +0100
committerLeah Rowe <leah@libreboot.org>2026-03-29 08:20:09 +0100
commit6e4839d3566bbabd30d0d15b4edb820d4d4b042f (patch)
tree8f277c6cf03cbc27ce04d71120783c8b601d8a65 /util/libreboot-utils
parent909b321f3a834dbcccf884bc8206a3fe7f1af149 (diff)
libreboot-utils: simplify lbgetprogname
make it more reliable; it can't segfault now, under any circumstance. not even once. the problem arised when lbsetname was not called in a program, before calling the function: lbgetprogname. a segfault would occur, due to it being NULL. not every os/libc has getprogname, so i have my own implementation. Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'util/libreboot-utils')
-rw-r--r--util/libreboot-utils/README.md4
-rw-r--r--util/libreboot-utils/lib/string.c40
2 files changed, 17 insertions, 27 deletions
diff --git a/util/libreboot-utils/README.md b/util/libreboot-utils/README.md
index 6e94035b..dca1b92e 100644
--- a/util/libreboot-utils/README.md
+++ b/util/libreboot-utils/README.md
@@ -31,7 +31,7 @@ of something like e.g. unveil, but in userspace!
Mkhtemp is designed to be the most secure implementation
possible, of mktemp, offering a heavy amount of hardening
-over traditional mktemp. Written in C89, and the plan is
+over traditional mktemp. Written in C99, and the plan is
very much to keep this code portable over time - patches
very much welcome.
@@ -241,7 +241,7 @@ a drop-in replacement on Linux distros (and BSDs if they
want it), while providing a more hardened version and
recommending that where possible.
-~~Rewrite it in rust~~ (nothing against it though, I just like C89 for some reason)
+~~Rewrite it in rust~~ (nothing against it though, I just like C99 for some reason)
Also, generally document the history of mktemp, and how
mkhtemp works in comparison.
diff --git a/util/libreboot-utils/lib/string.c b/util/libreboot-utils/lib/string.c
index d5e2de85..6a372dcf 100644
--- a/util/libreboot-utils/lib/string.c
+++ b/util/libreboot-utils/lib/string.c
@@ -359,22 +359,16 @@ no_op(void)
const char *
lbgetprogname(void)
{
- static char *rval = NULL;
- static char *p;
- static int setname = 0;
-
- if (!setname) {
- if ((rval = lbsetprogname(NULL)) == NULL)
- return NULL;
-
- p = strrchr(rval, '/');
- if (p)
- rval = p + 1;
-
- setname = 1;
- }
-
- return rval;
+ char *name = lbsetprogname(NULL);
+ char *p = NULL;
+ if (name)
+ p = strrchr(name, '/');
+ if (p)
+ return p + 1;
+ else if (name)
+ return name;
+ else
+ return "libreboot-utils";
}
/* singleton. if string not null,
@@ -385,17 +379,13 @@ lbgetprogname(void)
char *
lbsetprogname(char *argv0)
{
- static int setname = 0;
static char *progname = NULL;
- size_t len;
-
- if (!setname) {
- if (if_err(argv0 == NULL || *argv0 == '\0', EFAULT) ||
- slen(argv0, 4096, &len) < 0)
- return NULL;
+ static int set = 0;
- memcpy(smalloc(&progname, len + 1), argv0, len + 1);
- setname = 1;
+ if (!set) {
+ if (argv0 == NULL || sdup(argv0, 4096, &progname) < 0)
+ return "libreboot-utils";
+ set = 1;
}
return progname;