Download raw body.
[PATCH] privsep.c: ignore closefrom() return value
On Mon, Dec 06, 2021 at 11:54:13AM +0100, Stefan Sperling wrote:
> On Mon, Dec 06, 2021 at 03:19:04PM +0500, Anna “CyberTailor” wrote:
> > closefrom(2) is void on FreeBSD and libbsd, so its return value has to
> > be ignored.
> >
> > https://bugs.gentoo.org/828003
> > ---
> > lib/privsep.c | 6 ++----
> > 1 file changed, 2 insertions(+), 4 deletions(-)
>
> This patch should be applied to -portable only.
>
> On OpenBSD there are failure conditions:
>
> closefrom() will fail if:
>
> [EBADF] fd is greater than all open file descriptors.
>
> [EINTR] An interrupt was received.
>
> Especially EINTR seems important. It means closefrom was interrupted
> and could not complete its task.
Taking a closer look at this, the FreeBSD port uses a #define to
work around this:
https://cgit.freebsd.org/ports/plain/devel/got/files/openbsd-compat/openbsd-compat.h
/* void -> int */
#define closefrom(fd) (closefrom(fd), 0)
Would this approach work for -portable?
> > diff --git a/lib/privsep.c b/lib/privsep.c
> > index ca518be1..8f233724 100644
> > --- a/lib/privsep.c
> > +++ b/lib/privsep.c
> > @@ -2766,10 +2766,8 @@ got_privsep_exec_child(int imsg_fds[2], const char *path, const char *repo_path)
> > fprintf(stderr, "%s: %s\n", getprogname(), strerror(errno));
> > _exit(1);
> > }
> > - if (closefrom(GOT_IMSG_FD_CHILD + 1) == -1) {
> > - fprintf(stderr, "%s: %s\n", getprogname(), strerror(errno));
> > - _exit(1);
> > - }
> > +
> > + closefrom(GOT_IMSG_FD_CHILD + 1);
> >
> > if (execl(path, path, repo_path, (char *)NULL) == -1) {
> > fprintf(stderr, "%s: %s: %s\n", getprogname(), path,
> > --
> > 2.34.1
> >
> >
>
>
[PATCH] privsep.c: ignore closefrom() return value