libreboot-utils: much stricter open() handling

abort on error, and do EINTR looping

Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
Leah Rowe
2026-03-28 08:09:14 +00:00
parent 03dd3c2894
commit 49cac232d8
3 changed files with 36 additions and 5 deletions
+34 -2
View File
@@ -589,6 +589,36 @@ free_and_set_null(char **buf)
*buf = NULL;
}
void
open_on_eintr(char *path,
int *fd, int flags, mode_t mode)
{
int r = -1;
int saved_errno = errno;
if (path == NULL)
err_exit(EINVAL, "open_on_eintr: null path");
if (fd == NULL)
err_exit(EFAULT, "%s: open_on_eintr: null fd ptr", path);
if (*fd >= 0)
err_exit(EBADF, "%s: open_on_eintr: file already open", path);
do {
r = open(path, flags, mode);
} while (r == -1 && (
errno == EINTR || errno == EAGAIN ||
errno == EWOULDBLOCK || errno == ETXTBSY));
if (r < 0)
err_exit(errno, "%s: open_on_eintr: could not close", path);
*fd = r;
errno = saved_errno;
}
void
close_on_eintr(int *fd)
{
@@ -672,8 +702,10 @@ rootfs(void)
if (!fs_initialised) {
global_fs.rootfd =
open("/", O_RDONLY | O_DIRECTORY | O_CLOEXEC);
global_fs.rootfd = -1;
open_on_eintr("/", &global_fs.rootfd,
O_RDONLY | O_DIRECTORY | O_CLOEXEC, 0400);
if (global_fs.rootfd < 0)
return NULL;