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

From:
Josh Rickmar <joshrickmar@outlook.com>
Subject:
Re: fix non-portable use of pipe(2)
To:
"Todd C. Miller" <Todd.Miller@sudo.ws>, gameoftrees@openbsd.org
Date:
Thu, 17 Jun 2021 11:28:46 -0400

Download raw body.

Thread
On Thu, Jun 17, 2021 at 04:20:17PM +0200, Stefan Sperling wrote:
> 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) {
> 
> 

ok jrick