# HG changeset patch # User Valentin Bartenev # Date 1441052716 -10800 # Node ID 8c6e71722aff56001ff50a82e3b9dc506108b4e3 # Parent 06e850859a262ae55d68e6e4a1985fe64ad31f87 Added protection against r->main->count overflow by subrequests. This overflow has become possible after the change in 06e850859a26, since concurrent subrequests are not limited now and each of them is counted in r->main->count. diff -r 06e850859a26 -r 8c6e71722aff src/http/ngx_http_core_module.c --- a/src/http/ngx_http_core_module.c Sun Aug 23 21:03:32 2015 +0300 +++ b/src/http/ngx_http_core_module.c Mon Aug 31 23:25:16 2015 +0300 @@ -2433,6 +2433,16 @@ return NGX_ERROR; } + /* + * 1000 is reserved for other purposes. + */ + if (r->main->count >= 65535 - 1000) { + ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0, + "request reference counter overflow " + "while processing \"%V\"", uri); + return NGX_ERROR; + } + sr = ngx_pcalloc(r->pool, sizeof(ngx_http_request_t)); if (sr == NULL) { return NGX_ERROR; diff -r 06e850859a26 -r 8c6e71722aff src/http/ngx_http_request.h --- a/src/http/ngx_http_request.h Sun Aug 23 21:03:32 2015 +0300 +++ b/src/http/ngx_http_request.h Mon Aug 31 23:25:16 2015 +0300 @@ -439,8 +439,8 @@ ngx_http_cleanup_t *cleanup; + unsigned count:16; unsigned subrequests:8; - unsigned count:8; unsigned blocked:8; unsigned aio:1;