diff options
| -rw-r--r-- | util/libreboot-utils/lib/io.c | 7 | ||||
| -rw-r--r-- | util/libreboot-utils/lib/mkhtemp.c | 19 |
2 files changed, 20 insertions, 6 deletions
diff --git a/util/libreboot-utils/lib/io.c b/util/libreboot-utils/lib/io.c index 9bbf1f30..56f8528a 100644 --- a/util/libreboot-utils/lib/io.c +++ b/util/libreboot-utils/lib/io.c @@ -28,6 +28,8 @@ open_gbe_file(void) struct xstate *x = xstatus(); struct commands *cmd = &x->cmd[x->i]; struct xfile *f = &x->f; + int saved_errno = errno; + errno = 0; int _flags; @@ -46,7 +48,8 @@ open_gbe_file(void) if (f->gbe_st.st_nlink == 0) err_exit(EIO, "%s: file unlinked while open", f->fname); - _flags = fcntl(f->gbe_fd, F_GETFL); + while (fs_retry(saved_errno, + _flags = fcntl(f->gbe_fd, F_GETFL))); if (_flags == -1) err_exit(errno, "%s: fcntl(F_GETFL)", f->fname); @@ -74,6 +77,8 @@ open_gbe_file(void) if (lock_file(f->gbe_fd, cmd->flags) == -1) err_exit(errno, "%s: can't lock", f->fname); */ + + reset_caller_errno(0); } void diff --git a/util/libreboot-utils/lib/mkhtemp.c b/util/libreboot-utils/lib/mkhtemp.c index 7d1a02f3..d3ca92b0 100644 --- a/util/libreboot-utils/lib/mkhtemp.c +++ b/util/libreboot-utils/lib/mkhtemp.c @@ -744,15 +744,21 @@ int secure_file(int *fd, int do_lock, mode_t mode) { - int flags; + int flags = -1; struct stat st_now; int saved_errno = errno; errno = 0; if (if_err(fd == NULL || st == NULL, EFAULT) || - if_err(*fd < 0, EBADF) || - if_err_sys((flags = fcntl(*fd, F_GETFL)) == -1) || - if_err(bad_flags > 0 && (flags & bad_flags), EPERM)) + if_err(*fd < 0, EBADF)) + goto err_demons; + + while (fs_retry(saved_errno, + flags = fcntl(*fd, F_GETFL))); + if (flags == -1) + goto err_demons; + + if (if_err(bad_flags > 0 && (flags & bad_flags), EPERM)) goto err_demons; if (expected != NULL) { @@ -878,6 +884,7 @@ lock_file(int fd, int flags) { struct flock fl; int saved_errno = errno; + int fcntl_rval = -1; errno = 0; if (if_err(fd < 0, EBADF) || @@ -893,7 +900,9 @@ lock_file(int fd, int flags) fl.l_whence = SEEK_SET; - if (fcntl(fd, F_SETLK, &fl) == -1) + while (fs_retry(saved_errno, + fcntl_rval = fcntl(fd, F_SETLK, &fl))); + if (fcntl_rval == -1) goto err_lock_file; reset_caller_errno(0); |
