[PATCH] http_request: fix a segmentation fault

Maxim Dounin mdounin at mdounin.ru
Wed May 27 04:19:05 MSD 2009


Hello!

On Wed, May 27, 2009 at 02:19:43AM +0400, Kirill A. Korinskiy wrote:

> At Wed, 27 May 2009 00:01:16 +0400,
> Maxim Dounin <mdounin at mdounin.ru> wrote:
> > 
> > А кто будет уничтожать request pool здесь и далее?  Он уже создан..
> > 
> 
> исправленный патч.

[...]

> --- a/src/http/ngx_http_request.c
> +++ b/src/http/ngx_http_request.c
> @@ -449,13 +449,15 @@ ngx_http_init_request(ngx_event_t *rev)
>                        sizeof(ngx_table_elt_t))
>          != NGX_OK)
>      {
> -        ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
> +        ngx_http_close_connection(c);
> +        ngx_destroy_pool(r->pool);

[...]

Не то чтобы совсем не попал, но не попал в шарик.

Если ты посмотришь внимательно, то заметишь что в r->pool есть 
log, и этот log используется в ngx_destroy_pool().  И, что особенно 
неожиданно, этот log использует всякого выделенного из pool'а 
соединения.  Т.е. работать оно может и будет, но как минимум use 
after free ты заработал.

Что будет если вдруг обратно вернутся треды - даже и представлять 
не хочу.

Maxim Dounin





More information about the nginx-ru mailing list