diff options
Diffstat (limited to 'util/libreboot-utils/lib')
| -rw-r--r-- | util/libreboot-utils/lib/file.c | 23 | ||||
| -rw-r--r-- | util/libreboot-utils/lib/mkhtemp.c | 8 | ||||
| -rw-r--r-- | util/libreboot-utils/lib/string.c | 50 |
3 files changed, 42 insertions, 39 deletions
diff --git a/util/libreboot-utils/lib/file.c b/util/libreboot-utils/lib/file.c index efc23ba9..0385ebbb 100644 --- a/util/libreboot-utils/lib/file.c +++ b/util/libreboot-utils/lib/file.c @@ -521,6 +521,8 @@ fs_dirname_basename(const char *path, char *buf = NULL; char *slash; size_t len; + const char *d = NULL; + const char *b = NULL; errno = 0; if (if_err(path == NULL || dir == NULL || base == NULL, EFAULT)) @@ -539,22 +541,27 @@ fs_dirname_basename(const char *path, if (slash) { *slash = '\0'; - *dir = buf; - *base = slash + 1; + d = buf; + b = slash + 1; - if (**dir == '\0') { - (*dir)[0] = '/'; - (*dir)[1] = '\0'; - } + if (*d == '\0') + d = "/"; } else if (allow_relative) { - sdup(".", PATH_MAX, dir); - *base = buf; + d = "."; + b = buf; } else { free_and_set_null(&buf); goto err; } + if (dup_pair(dir, d, base, b) < 0) { + free_and_set_null(&buf); + goto err; + } + + free_and_set_null(&buf); + reset_caller_errno(0); return 0; err: diff --git a/util/libreboot-utils/lib/mkhtemp.c b/util/libreboot-utils/lib/mkhtemp.c index d9411104..d394ae73 100644 --- a/util/libreboot-utils/lib/mkhtemp.c +++ b/util/libreboot-utils/lib/mkhtemp.c @@ -195,7 +195,11 @@ env_tmpdir(int bypass_all_sticky_checks, char **tmpdir, bypass_all_sticky_checks)) goto err; - rval = t; + rval = NULL; + if (t != NULL) { + if (sdup(t, PATH_MAX, &rval) == NULL) + goto err; + } goto out; } @@ -547,7 +551,7 @@ mkhtemp_try_create(int dirfd, /* try O_TMPFILE fast path */ if (mkhtemp_tmpfile_linux(dirfd, st_dir_first, fname_copy, - p, xc, fd, st) == 0) { + p, xc, fd, st) >= 0) { errno = saved_errno; rval = 1; diff --git a/util/libreboot-utils/lib/string.c b/util/libreboot-utils/lib/string.c index 5e0b4c33..7388cf35 100644 --- a/util/libreboot-utils/lib/string.c +++ b/util/libreboot-utils/lib/string.c @@ -270,6 +270,27 @@ out: return *rval; } +int +dup_pair(char **dir, const char *d, + char **base, const char *b) +{ + char *dtmp = NULL; + char *btmp = NULL; + + if (d && sdup(d, PATH_MAX, &dtmp) == NULL) + return -1; + + if (b && sdup(b, PATH_MAX, &btmp) == NULL) { + free(dtmp); + return -1; + } + + *dir = dtmp; + *base = btmp; + + return 0; +} + /* strict word-based strdup */ char * sdup(const char *s, @@ -620,32 +641,3 @@ lbsetprogname(char *argv0) return progname; } - -/* https://man.openbsd.org/pledge.2 - https://man.openbsd.org/unveil.2 */ -int -xpledgex(const char *promises, const char *execpromises) -{ - int saved_errno = errno; - (void) promises, (void) execpromises, (void) saved_errno; - errno = 0; -#ifdef __OpenBSD__ - if (pledge(promises, execpromises) == -1) - exitf("pledge"); -#endif - reset_caller_errno(0); - return 0; -} -int -xunveilx(const char *path, const char *permissions) -{ - int saved_errno = errno; - (void) path, (void) permissions, (void) saved_errno; - errno = 0; -#ifdef __OpenBSD__ - if (pledge(promises, execpromises) == -1) - exitf("pledge"); -#endif - reset_caller_errno(0); - return 0; -} |
