* Suspicious fetch-pack behaviour
@ 2019-01-03 9:52 Guilhem Bonnefille
2019-01-07 3:37 ` brian m. carlson
2019-01-08 6:34 ` Jeff King
0 siblings, 2 replies; 4+ messages in thread
From: Guilhem Bonnefille @ 2019-01-03 9:52 UTC (permalink / raw)
To: Git List
Hi,
One of my users reported a strange problem: a simple HTTPS clone did
not work with Git 1.8.3.1 on RedHat 7.
I did many tests and I was not able to understand why his clone don't
work while I'm able to do it on other similar host.
Nevertheless, we did more investigations. One of them: a raw strace.
I discovered two strange behaviours:
- fetch-pack closes its standard input and standard output and then
tries to print the references on standard input and finaly dies.
- git-remote-https does not react to fetch-pack death and continue
polling an empty set of FD.
Reading fetch-pack code, the behaviour is explicit:
When "--stateless-rpc" is provided, fd is filled with standard input
and standard ouput which are then closed.
https://git.kernel.org/pub/scm/git/git.git/tree/builtin/fetch-pack.c?h=v1.8.3.1#n156
Reading this, I did not understand why it could work.
Any help appreciated.
Here is the strace's extract:
2801 getdents(3, /* 2 entries */, 32768) = 48
2801 getdents(3, /* 0 entries */, 32768) = 0
2801 close(3) = 0
2801 close(0) = 0
2801 close(1) = 0
2801 fstat(1, 0x7ffe10ab4730) = -1 EBADF (Bad file descriptor)
2801 mmap(NULL, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f220c9e3000
2801 fstat(1, 0x7ffe10ab5040) = -1 EBADF (Bad file descriptor)
2801 write(1, "4df1dbf3224064cc5dd2e4c095da2dda"..., 159) = -1 EBADF
(Bad file descriptor)
2801 exit_group(0) = ?
2801 +++ exited with 0 +++
2769 <... poll resumed> ) = ? ERESTART_RESTARTBLOCK
(Interrupted by signal)
2769 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2801,
si_uid=7561, si_status=0, si_utime=0, si_stime=0} ---
2769 restart_syscall(<... resuming interrupted poll ...>) = 0
2769 poll(NULL, 0, 1000) = 0 (Timeout)
2769 poll(NULL, 0, 1000) = 0 (Timeout)
2769 poll(NULL, 0, 1000) = 0 (Timeout)
2769 poll(NULL, 0, 1000) = 0 (Timeout)
2769 poll(NULL, 0, 1000) = 0 (Timeout)
2769 poll(NULL, 0, 1000) = 0 (Timeout)
--
Guilhem BONNEFILLE
-=- JID: guyou@im.apinc.org MSN: guilhem_bonnefille@hotmail.com
-=- mailto:guilhem.bonnefille@gmail.com
-=- http://nathguil.free.fr/
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Suspicious fetch-pack behaviour
2019-01-03 9:52 Suspicious fetch-pack behaviour Guilhem Bonnefille
@ 2019-01-07 3:37 ` brian m. carlson
2019-01-08 6:34 ` Jeff King
1 sibling, 0 replies; 4+ messages in thread
From: brian m. carlson @ 2019-01-07 3:37 UTC (permalink / raw)
To: Guilhem Bonnefille; +Cc: Git List
[-- Attachment #1: Type: text/plain, Size: 1643 bytes --]
On Thu, Jan 03, 2019 at 10:52:48AM +0100, Guilhem Bonnefille wrote:
> Hi,
>
> One of my users reported a strange problem: a simple HTTPS clone did
> not work with Git 1.8.3.1 on RedHat 7.
> I did many tests and I was not able to understand why his clone don't
> work while I'm able to do it on other similar host.
>
> Nevertheless, we did more investigations. One of them: a raw strace.
> I discovered two strange behaviours:
> - fetch-pack closes its standard input and standard output and then
> tries to print the references on standard input and finaly dies.
> - git-remote-https does not react to fetch-pack death and continue
> polling an empty set of FD.
>
> Reading fetch-pack code, the behaviour is explicit:
> When "--stateless-rpc" is provided, fd is filled with standard input
> and standard ouput which are then closed.
> https://git.kernel.org/pub/scm/git/git.git/tree/builtin/fetch-pack.c?h=v1.8.3.1#n156
>
> Reading this, I did not understand why it could work.
> Any help appreciated.
When --stateless-rpc is passed, git fetch-pack usually has its standard
input and output wired up to the ends of a socket. Those file
descriptors are then passed to do_fetch_pack, which calls get_common to
negotiate refs with the remote side and get_pack to get the resulting
pack data. The negotiation should function regardless of the final ref
printing.
It's true that attempting to write to the standard output fails in that
case, but that's okay, since we wouldn't have wanted to write that data
to the socket anyway.
--
brian m. carlson: Houston, Texas, US
OpenPGP: https://keybase.io/bk2204
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 868 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Suspicious fetch-pack behaviour
2019-01-03 9:52 Suspicious fetch-pack behaviour Guilhem Bonnefille
2019-01-07 3:37 ` brian m. carlson
@ 2019-01-08 6:34 ` Jeff King
2019-01-08 7:26 ` Guilhem Bonnefille
1 sibling, 1 reply; 4+ messages in thread
From: Jeff King @ 2019-01-08 6:34 UTC (permalink / raw)
To: Guilhem Bonnefille; +Cc: Git List
On Thu, Jan 03, 2019 at 10:52:48AM +0100, Guilhem Bonnefille wrote:
> One of my users reported a strange problem: a simple HTTPS clone did
> not work with Git 1.8.3.1 on RedHat 7.
> I did many tests and I was not able to understand why his clone don't
> work while I'm able to do it on other similar host.
>
> Nevertheless, we did more investigations. One of them: a raw strace.
> I discovered two strange behaviours:
> - fetch-pack closes its standard input and standard output and then
> tries to print the references on standard input and finaly dies.
> - git-remote-https does not react to fetch-pack death and continue
> polling an empty set of FD.
>
> [...]
>
> 2769 poll(NULL, 0, 1000) = 0 (Timeout)
We actually don't use poll() very much in Git. And poking around the
v1.8.3.1 source, I do not see any places where remote-https would call
poll(), and none outside of "git help" and "git credential-cache-daemon"
that would ever provide a timeout like "1000".
I wonder if this poll is actually being run by libcurl. Is it possible
to get a backtrace of the looping process with gdb?
I'd also point out that v1.8.3.1 is over 5 years old, and there have
been quite a few http-related fixes over the years. There is a good
chance that if this is a Git bug, it has long since been fixed. Is it
possible to reproduce with a more modern version of Git?
-Peff
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Suspicious fetch-pack behaviour
2019-01-08 6:34 ` Jeff King
@ 2019-01-08 7:26 ` Guilhem Bonnefille
0 siblings, 0 replies; 4+ messages in thread
From: Guilhem Bonnefille @ 2019-01-08 7:26 UTC (permalink / raw)
To: Jeff King; +Cc: Git List
Le mar. 8 janv. 2019 à 07:34, Jeff King <peff@peff.net> a écrit :
>
> On Thu, Jan 03, 2019 at 10:52:48AM +0100, Guilhem Bonnefille wrote:
>
> > One of my users reported a strange problem: a simple HTTPS clone did
> > not work with Git 1.8.3.1 on RedHat 7.
> > I did many tests and I was not able to understand why his clone don't
> > work while I'm able to do it on other similar host.
> >
> > Nevertheless, we did more investigations. One of them: a raw strace.
> > I discovered two strange behaviours:
> > - fetch-pack closes its standard input and standard output and then
> > tries to print the references on standard input and finaly dies.
> > - git-remote-https does not react to fetch-pack death and continue
> > polling an empty set of FD.
> >
> > [...]
> >
> > 2769 poll(NULL, 0, 1000) = 0 (Timeout)
>
> We actually don't use poll() very much in Git. And poking around the
> v1.8.3.1 source, I do not see any places where remote-https would call
> poll(), and none outside of "git help" and "git credential-cache-daemon"
> that would ever provide a timeout like "1000".
>
> I wonder if this poll is actually being run by libcurl. Is it possible
> to get a backtrace of the looping process with gdb?
Quite hard to debug as it occured on a computer provided by a
customer, far from me...
> I'd also point out that v1.8.3.1 is over 5 years old, and there have
> been quite a few http-related fixes over the years.
Yes, it is an old version, but it is the version provided with RedHat 7.
> There is a good
> chance that if this is a Git bug, it has long since been fixed. Is it
> possible to reproduce with a more modern version of Git?
>
What is surprisingly is that I was unable to reproduce with the same
version on an other computer.
During this time, my user discovered the IT team of the customer
prvide a much more recent version of Git (2.X). With this new version,
the problem was not reproduced.
Thanks for all your investigations.
--
Guilhem BONNEFILLE
-=- JID: guyou@im.apinc.org MSN: guilhem_bonnefille@hotmail.com
-=- mailto:guilhem.bonnefille@gmail.com
-=- http://nathguil.free.fr/
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-01-08 7:26 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-03 9:52 Suspicious fetch-pack behaviour Guilhem Bonnefille
2019-01-07 3:37 ` brian m. carlson
2019-01-08 6:34 ` Jeff King
2019-01-08 7:26 ` Guilhem Bonnefille
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).