On Mon, 11 Oct 2021 17:28:51 +0200 Jean Weisbuch <
jean@phpnet.org> wrote:
> I also have the issue on a custom compiled HTTPD and ITK, it's not a
> Debian specific bug ; it appeared between 2.4.48 and 2.4.49.
>
>
> Here is a basic patch for 2.4.51 that comments the line that provokes
> the segfaults but it might break other things :
>
> --- server/connection.c 2021-09-26 16:11:22.000000000 +0200
> +++ server/connection.c 2021-10-11 17:00:17.868463811 +0200
> @@ -156,7 +156,7 @@
> apr_socket_t *csd = ap_get_conn_socket(c);
>
> if (ap_start_lingering_close(c)) {
> - apr_socket_close(csd);
> +// apr_socket_close(csd);
> return;
> }
>
> A "cleaner" patch, also for 2.4.51, that reverts the changes between
> 2.4.48 and 2.4.49 on connection.c but keep the other changes ; i don't
> know what those changes could imply so i advise against using it on a
> production platform :
>
> --- ./server/connection.c 2021-09-26 16:11:22.000000000 +0200
> +++ ./server/connection.c 2021-10-11 17:15:04.232960328 +0200
> @@ -139,12 +139,18 @@
> ap_flush_conn(c);
>
> #ifdef NO_LINGCLOSE
> + apr_socket_close(csd);
> return 1;
> #else
> /* Shut down the socket for write, which will send a FIN
> * to the peer.
> */
> - return (c->aborted || apr_socket_shutdown(csd, APR_SHUTDOWN_WRITE));
> + if (c->aborted
> + || apr_socket_shutdown(csd, APR_SHUTDOWN_WRITE) !=
> APR_SUCCESS) {
> + apr_socket_close(csd);
> + return 1;
> + }
> + return 0;
> #endif
> }
>
> @@ -156,7 +162,6 @@
> apr_socket_t *csd = ap_get_conn_socket(c);
>
> if (ap_start_lingering_close(c)) {
> - apr_socket_close(csd);
> return;
> }
>
>
>