git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] git-daemon: fix segfaulting in child_handler() in AIX

From
Christian Couder <christian.couder@gmail.com>
Date
Apr 20, 2011, 12:53 UTC
Message-ID
<BANLkTimtfXgy9UcdQ8b-8dLrO-qgXFgQnw@mail.gmail.com>
In-Reply-To
<BANLkTi=6UVWpa2aPPebVUG9ZyL_h7OcwUQ@mail.gmail.com>
Hi,

I have no idea what the problem could be, but maybe I will be lucky with my suggestions.

On Fri, Apr 15, 2011 at 6:54 PM, Seth Jennings <spartacus06@gmail.com> wrote:
Show 15 quoted lines
> There is a git-daemon segfault issue that seems to be specific to AIX.
>
> Whenever a remote user pulls or clones, the operation succeeds but
> git-daemon crashes immediately afterward.
>
> $ gdb git-daemon core
> ...
> Core was generated by `git-daemon'.
> Program terminated with signal 11, Segmentation fault.
> #0  0xd04f0c50 in _sigsetmask () from /usr/lib/libpthreads.a(shr_xpg5.o)
> (gdb) where
> #0  0xd04f0c50 in _sigsetmask () from /usr/lib/libpthreads.a(shr_xpg5.o)
> #1  0xd04f1874 in _p_sigaction () from /usr/lib/libpthreads.a(shr_xpg5.o)
> #2  0xd013ae34 in sigaction () from /usr/lib/libc.a(shr.o)
> #3  0xd0217cd8 in signal () from /usr/lib/libc.a(shr.o)

signal() is calling sigaction() so sigaction() must be called with different parameters in your patch and when it crashes. Could you have a look at the difference between parameters?

Show 14 quoted lines
> #4  0x10000b90 in child_handler (signo=0) at daemon.c:718
> #5  <signal handler called>
>
> Through experimentation, I found that using sigaction() instead of
> signal() resolves the issue.  I'm not entirely sure why this is.
>
> Any feedback about the issue or the patch is welcome.  There might be
> a better solution.
>
> On Fri, Apr 15, 2011 at 11:51 AM, Seth Jennings <spartacus06@gmail.com> wrote:
>> This issue seems to be specific to git-daemon on AIX built with xlc.
>> After commit 695605b5080e1957bd9dab1fed35a7fee9814297 (from Aug 2008),
>> git-daemon segfaults in child_handler() inside the signal() syscall
>> immediately after any remote clone/pull operation.
Could you try some variants that revert or change parts of this commit?
For example you could revert only this hunk:
@@ -1036,11 +1032,6 @@ int main(int argc, char **argv)
        gid_t gid = 0;
        int i;

-       /* Without this we cannot rely on waitpid() to tell
-        * what happened to our children.
-        */
-       signal(SIGCHLD, SIG_DFL);
-
        for (i = 1; i < argc; i++) {
                char *arg = argv[i];


>> While it is not
>> fully understood why this happens, changing signal() to sigaction()
>> resolves the issue.

Yeah but it would be nice to understand.

Thanks in advance,
Christian.
Previous: Seth JenningsNext: Seth Jennings
Message 3 of 5 in “git-daemon: fix segfaulting in child_handler() in AIX”
  1. git-daemon: fix segfaulting in child_handler() in AIXSeth Jennings, Apr 15, 2011
  2. Seth JenningsApr 15, 2011
  3. Christian CouderApr 20, 2011
  4. Seth JenningsMay 2, 2011
  5. Erik Faye-LundApr 21, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.