summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2026-03-16 16:12:02 +0000
committerLeah Rowe <leah@libreboot.org>2026-03-16 16:13:50 +0000
commitf62ac24d8fa4fe972b6bc9a3f942cd25367fe4d3 (patch)
treeb2af3e9194d45b4d0f8f7cba68aaabd30f595f80
parente5e107d8cd51efa26387f10de85a2549083ad89d (diff)
util/nvmutil: more secure mkstemp
try a few more times until success explicitly return EEXIST when needed we try multiple times and check more thoroughly if a file exists, thus reducing the risk of race conditions Signed-off-by: Leah Rowe <leah@libreboot.org>
-rw-r--r--util/nvmutil/nvmutil.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/util/nvmutil/nvmutil.c b/util/nvmutil/nvmutil.c
index 13919804..58b9fdbf 100644
--- a/util/nvmutil/nvmutil.c
+++ b/util/nvmutil/nvmutil.c
@@ -3009,12 +3009,19 @@ static int
x_i_mkstemp(char *template)
{
int fd;
+ int i;
- if (mktemp(template) == NULL)
- return -1;
+ for (i = 0; i < 10; i++) {
+ if (mktemp(template) == NULL)
+ return -1;
- fd = open(template, O_RDWR | O_CREAT | O_EXCL, 0600);
- return fd;
+ fd = open(template, O_RDWR | O_CREAT | O_EXCL, 0600);
+ if (fd >= 0)
+ return fd;
+ }
+
+ errno = EEXIST;
+ return -1;
}
static char *