Latest update - 9257
This commit is contained in:
@@ -478,3 +478,4 @@ f8134640e8615448205785cf00b0bc810489b495 release-1.25.1
|
||||
294a3d07234f8f65d7b0e0b0e2c5b05c12c5da0a release-1.25.3
|
||||
173a0a7dbce569adbb70257c6ec4f0f6bc585009 release-1.25.4
|
||||
8618e4d900cc71082fbe7dc72af087937d64faf5 release-1.25.5
|
||||
2166e329fb4ed7d6da7c823ee6499f7d06d7bc00 release-1.27.0
|
||||
@@ -5,6 +5,74 @@
|
||||
<change_log title="nginx">
|
||||
|
||||
|
||||
<changes ver="1.27.0" date="2024-05-29">
|
||||
|
||||
<change type="security">
|
||||
<para lang="ru">
|
||||
при использовании HTTP/3 обработка специально созданной QUIC-сессии могла
|
||||
приводить к падению рабочего процесса, отправке клиенту содержимого памяти
|
||||
рабочего процесса на системах с MTU больше 4096 байт, а также потенциально
|
||||
могла иметь другие последствия
|
||||
(CVE-2024-32760, CVE-2024-31079, CVE-2024-35200, CVE-2024-34161).<br/>
|
||||
Спасибо Nils Bars из CISPA.
|
||||
</para>
|
||||
<para lang="en">
|
||||
when using HTTP/3, processing of a specially crafted QUIC session might
|
||||
cause a worker process crash, worker process memory disclosure on systems
|
||||
with MTU larger than 4096 bytes, or might have potential other impact
|
||||
(CVE-2024-32760, CVE-2024-31079, CVE-2024-35200, CVE-2024-34161).<br/>
|
||||
Thanks to Nils Bars of CISPA.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="feature">
|
||||
<para lang="ru">
|
||||
директивы proxy_limit_rate, fastcgi_limit_rate,
|
||||
scgi_limit_rate и uwsgi_limit_rate поддерживают переменные.
|
||||
</para>
|
||||
<para lang="en">
|
||||
variables support
|
||||
in the "proxy_limit_rate", "fastcgi_limit_rate", "scgi_limit_rate",
|
||||
and "uwsgi_limit_rate" directives.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
уменьшено потребление памяти для долгоживущих запросов,
|
||||
если используются директивы gzip, gunzip, ssi, sub_filter или grpc_pass.
|
||||
</para>
|
||||
<para lang="en">
|
||||
reduced memory consumption for long-lived requests
|
||||
if "gzip", "gunzip", "ssi", "sub_filter", or "grpc_pass" directives are used.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
nginx не собирался gcc 14,
|
||||
если использовался параметр --with-atomic.<br/>
|
||||
Спасибо Edgar Bonet.
|
||||
</para>
|
||||
<para lang="en">
|
||||
nginx could not be built by gcc 14
|
||||
if the --with-atomic option was used.<br/>
|
||||
Thanks to Edgar Bonet.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change>
|
||||
<para lang="ru">
|
||||
Исправления в HTTP/3.
|
||||
</para>
|
||||
<para lang="en">
|
||||
Bugfixes in HTTP/3.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
</changes>
|
||||
|
||||
|
||||
<changes ver="1.25.5" date="2024-04-16">
|
||||
|
||||
<change type="feature">
|
||||
|
||||
@@ -648,6 +648,7 @@ ngx_quic_free_buffer(ngx_connection_t *c, ngx_quic_buffer_t *qb)
|
||||
ngx_quic_free_chain(c, qb->chain);
|
||||
|
||||
qb->chain = NULL;
|
||||
qb->last_chain = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -326,6 +326,11 @@ ngx_quic_handle_crypto_frame(ngx_connection_t *c, ngx_quic_header_t *pkt,
|
||||
ngx_quic_crypto_frame_t *f;
|
||||
|
||||
qc = ngx_quic_get_connection(c);
|
||||
|
||||
if (!ngx_quic_keys_available(qc->keys, pkt->level, 0)) {
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
ctx = ngx_quic_get_send_ctx(qc, pkt->level);
|
||||
f = &frame->u.crypto;
|
||||
|
||||
|
||||
@@ -1750,6 +1750,14 @@ ngx_quic_parse_transport_params(u_char *p, u_char *end, ngx_quic_tp_t *tp,
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if ((size_t) (end - p) < len) {
|
||||
ngx_log_error(NGX_LOG_INFO, log, 0,
|
||||
"quic failed to parse"
|
||||
" transport param id:0x%xL, data length %uL too long",
|
||||
id, len);
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
rc = ngx_quic_parse_transport_param(p, p + len, id, tp);
|
||||
|
||||
if (rc == NGX_ERROR) {
|
||||
|
||||
@@ -810,6 +810,7 @@ ngx_http_v3_parse_field_lri(ngx_connection_t *c,
|
||||
|
||||
st->literal.length = st->pint.value;
|
||||
if (st->literal.length == 0) {
|
||||
st->value.data = (u_char *) "";
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -932,6 +933,7 @@ ngx_http_v3_parse_field_l(ngx_connection_t *c,
|
||||
|
||||
st->literal.length = st->pint.value;
|
||||
if (st->literal.length == 0) {
|
||||
st->value.data = (u_char *) "";
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -1072,6 +1074,7 @@ ngx_http_v3_parse_field_lpbi(ngx_connection_t *c,
|
||||
|
||||
st->literal.length = st->pint.value;
|
||||
if (st->literal.length == 0) {
|
||||
st->value.data = (u_char *) "";
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
||||
@@ -134,7 +134,17 @@ ngx_http_v3_init(ngx_connection_t *c)
|
||||
}
|
||||
}
|
||||
|
||||
return ngx_http_v3_send_settings(c);
|
||||
if (ngx_http_v3_send_settings(c) != NGX_OK) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (h3scf->max_table_capacity > 0) {
|
||||
if (ngx_http_v3_get_uni_stream(c, NGX_HTTP_V3_STREAM_DECODER) == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -398,14 +408,12 @@ ngx_http_v3_wait_request_handler(ngx_event_t *rev)
|
||||
void
|
||||
ngx_http_v3_reset_stream(ngx_connection_t *c)
|
||||
{
|
||||
ngx_http_v3_session_t *h3c;
|
||||
ngx_http_v3_srv_conf_t *h3scf;
|
||||
|
||||
h3scf = ngx_http_v3_get_module_srv_conf(c, ngx_http_v3_module);
|
||||
ngx_http_v3_session_t *h3c;
|
||||
|
||||
h3c = ngx_http_v3_get_session(c);
|
||||
|
||||
if (h3scf->max_table_capacity > 0 && !c->read->eof && !h3c->hq
|
||||
if (!c->read->eof && !h3c->hq
|
||||
&& h3c->known_streams[NGX_HTTP_V3_STREAM_SERVER_DECODER]
|
||||
&& (c->quic->id & NGX_QUIC_STREAM_UNIDIRECTIONAL) == 0)
|
||||
{
|
||||
(void) ngx_http_v3_send_cancel_stream(c, c->quic->id);
|
||||
|
||||
@@ -308,7 +308,7 @@ ngx_http_v3_set_capacity(ngx_connection_t *c, ngx_uint_t capacity)
|
||||
prev_max = dt->capacity / 32;
|
||||
|
||||
if (max > prev_max) {
|
||||
elts = ngx_alloc(max * sizeof(void *), c->log);
|
||||
elts = ngx_alloc((max + 1) * sizeof(void *), c->log);
|
||||
if (elts == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
@@ -20,8 +20,6 @@ static void ngx_http_v3_close_uni_stream(ngx_connection_t *c);
|
||||
static void ngx_http_v3_uni_read_handler(ngx_event_t *rev);
|
||||
static void ngx_http_v3_uni_dummy_read_handler(ngx_event_t *wev);
|
||||
static void ngx_http_v3_uni_dummy_write_handler(ngx_event_t *wev);
|
||||
static ngx_connection_t *ngx_http_v3_get_uni_stream(ngx_connection_t *c,
|
||||
ngx_uint_t type);
|
||||
|
||||
|
||||
void
|
||||
@@ -307,7 +305,7 @@ ngx_http_v3_uni_dummy_write_handler(ngx_event_t *wev)
|
||||
}
|
||||
|
||||
|
||||
static ngx_connection_t *
|
||||
ngx_connection_t *
|
||||
ngx_http_v3_get_uni_stream(ngx_connection_t *c, ngx_uint_t type)
|
||||
{
|
||||
u_char buf[NGX_HTTP_V3_VARLEN_INT_LEN];
|
||||
|
||||
@@ -19,6 +19,8 @@ ngx_int_t ngx_http_v3_register_uni_stream(ngx_connection_t *c, uint64_t type);
|
||||
|
||||
ngx_int_t ngx_http_v3_cancel_stream(ngx_connection_t *c, ngx_uint_t stream_id);
|
||||
|
||||
ngx_connection_t *ngx_http_v3_get_uni_stream(ngx_connection_t *c,
|
||||
ngx_uint_t type);
|
||||
ngx_int_t ngx_http_v3_send_settings(ngx_connection_t *c);
|
||||
ngx_int_t ngx_http_v3_send_goaway(ngx_connection_t *c, uint64_t id);
|
||||
ngx_int_t ngx_http_v3_send_ack_section(ngx_connection_t *c,
|
||||
|
||||
Reference in New Issue
Block a user