Bug#1125713: apache2: Upgrade to 2.4.66-1~deb12u1 produces zombie PHP processes with FastCGI

Thomas Stangner <[email protected]> Wed, 21 Jan 2026 16:41:13 +0100
Newsgroups gmane.linux.debian.devel.apache
Message-ID <8c08b072-576a-4c17-997d-ec5d6885b085__48902.4858152092$1769010276$gmane$org@shadowweb.org>
Salut Bastien,

oh, https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1125368 somehow 
evaded me, I'm sorry.

Otherwise I would have referenced the older bug report (and my debugging 
work would have been cut short ...)

 > Could you test apache2 experimental ?

The packages from experminatal seem to fix the issue, I could not 
reproduce the segfaults with them (just like with my own patched 
Bookworm/Trixie packages).

Thanks for your work on the package,
Cheers,
Thomas


Am 21.01.26 um 12:12 schrieb Bastien Roucaries:
> Le mercredi 21 janvier 2026, 11:49:35 heure normale d’Europe centrale Thomas Stangner a écrit :
>> Hi,
>>
>> I also ran into this problem and was able to generate coredumps to debug
>> the issue.
>>
>> The zombie FCGI processes are caused by segfaulting parent Apache2
>> processes:
>>
>> [Wed Jan 21 08:15:04.609766 2026] [core:notice] [pid 4996:tid 4996]
>> AH00052: child pid 36382 exit signal Segmentation fault (11)
>> [Wed Jan 21 08:40:04.282658 2026] [core:notice] [pid 4996:tid 4996]
>> AH00052: child pid 85420 exit signal Segmentation fault (11)
>> [Wed Jan 21 08:54:05.207724 2026] [core:notice] [pid 4996:tid 4996]
>> AH00052: child pid 22762 exit signal Segmentation fault (11)
>>
>> The father Apache2 process gets terminated by the segfault and the
>> previously spawned FCGI child processes end up as zombies, because
>> nobody does a wait()/waitpid() on them.
>>
>> The segfaults are caused by a bug in mod_http2:
>>
>> ---------8<--------8<----------
>> Program terminated with signal SIGSEGV, Segmentation fault.
>> #0  c1_purge_streams (m=0x7fd5f77fb738) at ./modules/http2/h2_mplx.c:606
>> [Current thread is 1 (Thread 0x7fd5e27fc6c0 (LWP 79820))]
>> (gdb) bt full
>> #0  c1_purge_streams (m=0x7fd5f77fb738) at ./modules/http2/h2_mplx.c:606
>>           stream = 0x7fd5ff5bc0a0
>>           i = 1
>> #1  0x00007fd602eb1fe0 in h2_mplx_c1_poll (m=0x7fd5f77fb738,
>> timeout=timeout@entry=0,
>> on_stream_input=on_stream_input@entry=0x7fd602eb7230 <on_stream_input>,
>> on_stream_output=on_stream_output@entry=0x7fd602eb70f0
>> <on_stream_output>, on_ctx=on_ctx@entry=0x7fd5f77fb0a0) at
>> ./modules/http2/h2_mplx.c:659
>>           rv = <optimized out>
>> #2  0x00007fd602ebb1bc in h2_session_process (session=0x7fd5f77fb0a0,
>> async=0, pkeepalive=pkeepalive@entry=0x7fd5e27fbd14) at
>> ./modules/http2/h2_session.c:2013
>>           status = 0
>>           c = 0x7fd5f78042c8
>>           rv = <optimized out>
>>           mpm_state = 1
>>           trace = 0
>> #3  0x00007fd602ea481c in h2_c1_run (c=0x7fd5f78042c8) at
>> ./modules/http2/h2_c1.c:132
>>           status = <optimized out>
>>           mpm_state = 0
>>           keepalive = 0
>>           conn_ctx = 0x7fd5f783a3b0
>> #4  0x00005623928a4030 in ap_run_process_connection
>> (c=c@entry=0x7fd5f78042c8) at ./server/connection.c:42
>>           pHook = <optimized out>
>>           n = 4
>>           rv = -1
>> ---------8<--------8<----------
>>
>> An update to mod_http 2.0.37 resolves the problem (via this upstream patch):
>>
>> https://github.com/apache/httpd/commit/e41e84e08e6186460e77a8357b5d5c571d33bd76
>>
>> So I suggest cherry-picking this commit from the 2.4.x branch and
>> patching/updating mod_http2 from 2.0.35 to 2.0.37.
> Could you test apache2 experimental ?
>>
>> Cheers,
>> Thomas
>>
>