Mercurial > hg > nginx
changeset 7379:57463f4e2fcd
gRPC: limited allocations due to ping and settings frames.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 06 Nov 2018 16:29:59 +0300 |
parents | e7f19d268c72 |
children | 2351853ce686 |
files | src/http/modules/ngx_http_grpc_module.c |
diffstat | 1 files changed, 15 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_grpc_module.c Tue Nov 06 16:29:49 2018 +0300 +++ b/src/http/modules/ngx_http_grpc_module.c Tue Nov 06 16:29:59 2018 +0300 @@ -78,6 +78,9 @@ ngx_uint_t id; + ngx_uint_t pings; + ngx_uint_t settings; + ssize_t send_window; size_t recv_window; @@ -3584,6 +3587,12 @@ ctx->rest); return NGX_ERROR; } + + if (ctx->free == NULL && ctx->settings++ > 1000) { + ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, + "upstream sent too many settings frames"); + return NGX_ERROR; + } } for (p = b->pos; p < last; p++) { @@ -3736,6 +3745,12 @@ "upstream sent ping frame with ack flag"); return NGX_ERROR; } + + if (ctx->free == NULL && ctx->pings++ > 1000) { + ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, + "upstream sent too many ping frames"); + return NGX_ERROR; + } } for (p = b->pos; p < last; p++) {