On Mon, 11 Oct 2021 17:28:51 +0200 Jean Weisbuch <j...@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;
>       }
>
>
>

Reply via email to