[PATCH] Always use default server configs for large buffers allocation
Daniil Bondarev
xonatius at gmail.com
Fri Feb 17 01:00:20 UTC 2017
# HG changeset patch
# User Daniil Bondarev <bondarev at amazon.com>
# Date 1485286710 28800
# Tue Jan 24 11:38:30 2017 -0800
# Node ID 8cd694e06443aaa1ed0601108681fa1c6f7297e0
# Parent d84f48e571e449ee6c072a8d52cdea8e06b88ef7
Always use default server configs for large buffers allocation
Single http connection can flip between default server and virtual
servers: depending on parsed Host header for a current request nginx
changes current request configs. Currently this behavior might cause
buffer overrun while adding new buffer to hc->busy, if hc->busy was
allocated with config containing fewer large_client_header_buffers than
the current one.
This change makes nginx to always use large_client_header_buffers from
http_connection config, which is default server config.
diff -r d84f48e571e4 -r 8cd694e06443 src/http/ngx_http_request.c
--- a/src/http/ngx_http_request.c Tue Jan 24 17:02:19 2017 +0300
+++ b/src/http/ngx_http_request.c Tue Jan 24 11:38:30 2017 -0800
@@ -1447,7 +1447,9 @@ ngx_http_alloc_large_header_buffer(ngx_h
old = request_line ? r->request_start : r->header_name_start;
- cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
+ hc = r->http_connection;
+
+ cscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_core_module);
if (r->state != 0
&& (size_t) (r->header_in->pos - old)
@@ -1456,8 +1458,6 @@ ngx_http_alloc_large_header_buffer(ngx_h
return NGX_DECLINED;
}
- hc = r->http_connection;
-
if (hc->nfree) {
b = hc->free[--hc->nfree];
More information about the nginx-devel
mailing list