"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: fix non-portable use of pipe(2)
To:
"Todd C. Miller" <Todd.Miller@sudo.ws>
Cc:
gameoftrees@openbsd.org
Date:
Thu, 17 Jun 2021 16:20:17 +0200

Download raw body.

Thread
On Thu, Jun 17, 2021 at 06:45:55AM -0600, Todd C. Miller wrote:
> On Thu, 17 Jun 2021 14:30:42 +0200, Stefan Sperling wrote:
> 
> > The 'got fetch' command relies on bi-directional communication over
> > a pipe.
> 
> Any reason to not just use socketpair(2) which is bi-directional?

Nice, thanks a lot for this hint.
The much smaller diff below also fixes this issue on Linux.

> I suppose modern pipe implementations are intwined with the VM
> subsystem and might be faster.

I don't think it's worth caring about that.

diff 1d0f405485b02cc4480ea188879e4122e0ea32bd /home/stsp/src/got
blob - 0c3e36643b33aa891a6ae0ca06eac2c739842c4c
file + lib/fetch.c
--- lib/fetch.c
+++ lib/fetch.c
@@ -118,8 +118,8 @@ dial_ssh(pid_t *fetchpid, int *fetchfd, const char *ho
 	argv[i++] = (char *)path;
 	argv[i++] = NULL;
 
-	if (pipe(pfd) == -1)
-		return got_error_from_errno("pipe");
+	if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pfd) == -1)
+		return got_error_from_errno("socketpair");
 
 	pid = fork();
 	if (pid == -1) {