From fc3c7b9c3eeaa156ef235e172309e27bc7f2707b Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Thu, 2 Apr 2026 22:11:50 +0100 Subject: lbutils/file: tidy up mkhtemp_tmpfile_linux make failure more obvious. no behavioural change. Signed-off-by: Leah Rowe --- util/libreboot-utils/lib/mkhtemp.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/util/libreboot-utils/lib/mkhtemp.c b/util/libreboot-utils/lib/mkhtemp.c index bb714b82..4d511892 100644 --- a/util/libreboot-utils/lib/mkhtemp.c +++ b/util/libreboot-utils/lib/mkhtemp.c @@ -694,26 +694,27 @@ mkhtemp_tmpfile_linux(int dirfd, st_dir_first) < 0) goto err; - if (linkat(tmpfd, "", dirfd, fname_copy, AT_EMPTY_PATH) == 0) { + if (linkat(tmpfd, "", dirfd, + fname_copy, AT_EMPTY_PATH) == -1) { - linked = 1; /* file created */ - - /* TODO: potential fd leak here. - * probably should only set *fd on successful - * return from this function (see below) - */ - if (fd_verify_dir_identity(dirfd, st_dir_first) < 0 || - fstat(*fd = tmpfd, st) < 0 || - secure_file(fd, st, st, O_APPEND, 1, 1, 0600) < 0) + if (errno == EEXIST) + continue; /* retry on collision */ + else goto err; - - goto out; } - if (errno != EEXIST) + linked = 1; /* file created */ + + /* TODO: potential fd leak here. + * probably should only set *fd on successful + * return from this function (see below) + */ + if (fd_verify_dir_identity(dirfd, st_dir_first) < 0 || + fstat(*fd = tmpfd, st) < 0 || + secure_file(fd, st, st, O_APPEND, 1, 1, 0600) < 0) goto err; - /* retry on collision */ + goto out; } errno = EEXIST; -- cgit v1.2.1