Compare commits
No commits in common. 'c9' and 'c8-stream-1.14' have entirely different histories.
c9
...
c8-stream-
@ -1,2 +1,2 @@
|
||||
SOURCES/nginx-1.20.1.tar.gz
|
||||
SOURCES/nginx-logo.png
|
||||
SOURCES/nginx-1.14.1.tar.gz
|
||||
SOURCES/poweredby.png
|
||||
|
@ -1,2 +1,2 @@
|
||||
6b4ab4eff3c617e133819f43fdfc14708e593a79 SOURCES/nginx-1.20.1.tar.gz
|
||||
e28dd656984cc2894d8124c5278789c656f6a9cb SOURCES/nginx-logo.png
|
||||
a9dc8c5b055a3f0021d09c112d27422f45dd439c SOURCES/nginx-1.14.1.tar.gz
|
||||
2ec82988cd0d9b1304c95a16b28eff70f0f69abc SOURCES/poweredby.png
|
||||
|
@ -1,31 +0,0 @@
|
||||
From 00cab63102084b89de0a3494a1d023c4b1d4982b Mon Sep 17 00:00:00 2001
|
||||
From: Felix Kaechele <felix@kaechele.ca>
|
||||
Date: Sun, 7 Jun 2020 12:14:02 -0400
|
||||
Subject: [PATCH 1/2] remove Werror in upstream build scripts
|
||||
|
||||
removes -Werror in upstream build scripts. -Werror conflicts with
|
||||
-D_FORTIFY_SOURCE=2 causing warnings to turn into errors.
|
||||
|
||||
Signed-off-by: Felix Kaechele <felix@kaechele.ca>
|
||||
---
|
||||
auto/cc/gcc | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/auto/cc/gcc b/auto/cc/gcc
|
||||
index a5c5c18..cdbbadb 100644
|
||||
--- a/auto/cc/gcc
|
||||
+++ b/auto/cc/gcc
|
||||
@@ -166,7 +166,9 @@ esac
|
||||
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+# This combined with Fedora's FORTIFY_SOURCE=2 option causes it nginx
|
||||
+# to not compile.
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
||||
--
|
||||
2.31.1
|
||||
|
@ -0,0 +1,30 @@
|
||||
From f446736d4f4c5f7ae81bb8bf84fda7ce3c9d49a0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82@fedoraproject.org>
|
||||
Date: Wed, 24 Jan 2018 12:37:48 +0100
|
||||
Subject: [PATCH] unix/ngx_user: Apply fix for really old bug in glibc libcrypt
|
||||
if needed
|
||||
|
||||
---
|
||||
src/os/unix/ngx_user.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/os/unix/ngx_user.c b/src/os/unix/ngx_user.c
|
||||
index 7ebe2b57..d0fe9238 100644
|
||||
--- a/src/os/unix/ngx_user.c
|
||||
+++ b/src/os/unix/ngx_user.c
|
||||
@@ -21,8 +21,10 @@ ngx_libc_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
|
||||
struct crypt_data cd;
|
||||
|
||||
cd.initialized = 0;
|
||||
-#ifdef __GLIBC__
|
||||
- /* work around the glibc bug */
|
||||
+#if (defined(__GLIBC__) && __GLIBC__ == 2) && \
|
||||
+ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4)
|
||||
+ /* work around glibc-2.2.5 bug,
|
||||
+ * has been fixed at some time in glibc-2.3.X */
|
||||
cd.current_salt[0] = ~salt[0];
|
||||
#endif
|
||||
|
||||
--
|
||||
2.16.1
|
||||
|
@ -1,108 +0,0 @@
|
||||
From 62470498cca9a209aa9904668c1949f5229123af Mon Sep 17 00:00:00 2001
|
||||
From: Felix Kaechele <felix@kaechele.ca>
|
||||
Date: Tue, 20 Apr 2021 21:28:18 -0400
|
||||
Subject: [PATCH 2/2] fix PIDFile handling
|
||||
|
||||
Corresponding RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1869026
|
||||
|
||||
Rejected upstream: https://trac.nginx.org/nginx/ticket/1897
|
||||
|
||||
Taken from: https://git.launchpad.net/ubuntu/+source/nginx/tree/debian/patches/nginx-fix-pidfile.patch
|
||||
|
||||
From original patch:
|
||||
Author: Tj <ubuntu@iam.tj>
|
||||
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/nginx/+bug/1581864
|
||||
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=876365
|
||||
iLast-Update: 2020-06-24
|
||||
|
||||
Signed-off-by: Felix Kaechele <felix@kaechele.ca>
|
||||
---
|
||||
src/core/nginx.c | 24 +++++++++++++++++++++---
|
||||
src/os/unix/ngx_daemon.c | 8 ++++++--
|
||||
2 files changed, 27 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/core/nginx.c b/src/core/nginx.c
|
||||
index 48a20e9..32c0afe 100644
|
||||
--- a/src/core/nginx.c
|
||||
+++ b/src/core/nginx.c
|
||||
@@ -339,14 +339,21 @@ main(int argc, char *const *argv)
|
||||
ngx_process = NGX_PROCESS_MASTER;
|
||||
}
|
||||
|
||||
+ /* tell-tale to detect if this is parent or child process */
|
||||
+ ngx_int_t child_pid = NGX_BUSY;
|
||||
+
|
||||
#if !(NGX_WIN32)
|
||||
|
||||
if (ngx_init_signals(cycle->log) != NGX_OK) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
+ /* tell-tale that this code has been executed */
|
||||
+ child_pid--;
|
||||
+
|
||||
if (!ngx_inherited && ccf->daemon) {
|
||||
- if (ngx_daemon(cycle->log) != NGX_OK) {
|
||||
+ child_pid = ngx_daemon(cycle->log);
|
||||
+ if (child_pid == NGX_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -359,8 +366,19 @@ main(int argc, char *const *argv)
|
||||
|
||||
#endif
|
||||
|
||||
- if (ngx_create_pidfile(&ccf->pid, cycle->log) != NGX_OK) {
|
||||
- return 1;
|
||||
+ /* If ngx_daemon() returned the child's PID in the parent process
|
||||
+ * after the fork() set ngx_pid to the child_pid, which gets
|
||||
+ * written to the PID file, then exit.
|
||||
+ * For NGX_WIN32 always write the PID file
|
||||
+ * For others, only write it from the parent process */
|
||||
+ if (child_pid < NGX_OK || child_pid > NGX_OK) {
|
||||
+ ngx_pid = child_pid > NGX_OK ? child_pid : ngx_pid;
|
||||
+ if (ngx_create_pidfile(&ccf->pid, cycle->log) != NGX_OK) {
|
||||
+ return 1;
|
||||
+ }
|
||||
+ }
|
||||
+ if (child_pid > NGX_OK) {
|
||||
+ exit(0);
|
||||
}
|
||||
|
||||
if (ngx_log_redirect_stderr(cycle) != NGX_OK) {
|
||||
diff --git a/src/os/unix/ngx_daemon.c b/src/os/unix/ngx_daemon.c
|
||||
index 385c49b..3719854 100644
|
||||
--- a/src/os/unix/ngx_daemon.c
|
||||
+++ b/src/os/unix/ngx_daemon.c
|
||||
@@ -7,14 +7,17 @@
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
+#include <unistd.h>
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_daemon(ngx_log_t *log)
|
||||
{
|
||||
int fd;
|
||||
+ /* retain the return value for passing back to caller */
|
||||
+ pid_t pid_child = fork();
|
||||
|
||||
- switch (fork()) {
|
||||
+ switch (pid_child) {
|
||||
case -1:
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "fork() failed");
|
||||
return NGX_ERROR;
|
||||
@@ -23,7 +26,8 @@ ngx_daemon(ngx_log_t *log)
|
||||
break;
|
||||
|
||||
default:
|
||||
- exit(0);
|
||||
+ /* let caller do the exit() */
|
||||
+ return pid_child;
|
||||
}
|
||||
|
||||
ngx_parent = ngx_pid;
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,88 +0,0 @@
|
||||
From 4e5f12d6584536ead82d20554d8f3f2ab0107b0b Mon Sep 17 00:00:00 2001
|
||||
From: Lubos Uhliarik <luhliari@redhat.com>
|
||||
Date: Fri, 30 Apr 2021 13:07:45 +0000
|
||||
Subject: [PATCH 3/3] Support loading certificates from hardware token (PKCS#11)
|
||||
|
||||
---
|
||||
src/event/ngx_event_openssl.c | 65 +++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 65 insertions(+)
|
||||
|
||||
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
|
||||
index d762d6b..270b200 100644
|
||||
--- a/src/event/ngx_event_openssl.c
|
||||
+++ b/src/event/ngx_event_openssl.c
|
||||
@@ -617,6 +617,71 @@ ngx_ssl_load_certificate(ngx_pool_t *pool, char **err, ngx_str_t *cert,
|
||||
X509 *x509, *temp;
|
||||
u_long n;
|
||||
|
||||
+ if (ngx_strncmp(cert->data, "engine:", sizeof("engine:") - 1) == 0) {
|
||||
+
|
||||
+#ifndef OPENSSL_NO_ENGINE
|
||||
+
|
||||
+ u_char *p, *last;
|
||||
+ ENGINE *engine;
|
||||
+
|
||||
+ p = cert->data + sizeof("engine:") - 1;
|
||||
+ last = (u_char *) ngx_strchr(p, ':');
|
||||
+
|
||||
+ if (last == NULL) {
|
||||
+ *err = "invalid syntax";
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ *last = '\0';
|
||||
+
|
||||
+ engine = ENGINE_by_id((char *) p);
|
||||
+
|
||||
+ if (engine == NULL) {
|
||||
+ *err = "ENGINE_by_id() failed";
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (!ENGINE_init(engine)) {
|
||||
+ *err = "ENGINE_init() failed";
|
||||
+ ENGINE_free(engine);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ *last++ = ':';
|
||||
+
|
||||
+ struct {
|
||||
+ const char *cert_id;
|
||||
+ X509 *cert;
|
||||
+ } params = { (char *) last, NULL };
|
||||
+
|
||||
+ if (!ENGINE_ctrl_cmd(engine, "LOAD_CERT_CTRL", 0, ¶ms, NULL, 1)) {
|
||||
+ *err = "ENGINE_ctrl_cmd() failed - Unable to get the certificate";
|
||||
+ ENGINE_free(engine);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ENGINE_finish(engine);
|
||||
+ ENGINE_free(engine);
|
||||
+
|
||||
+ /* set chain to null */
|
||||
+
|
||||
+ *chain = sk_X509_new_null();
|
||||
+ if (*chain == NULL) {
|
||||
+ *err = "sk_X509_new_null() failed";
|
||||
+ X509_free(params.cert);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return params.cert;
|
||||
+
|
||||
+#else
|
||||
+
|
||||
+ *err = "loading \"engine:...\" certificate is not supported";
|
||||
+ return NULL;
|
||||
+
|
||||
+#endif
|
||||
+ }
|
||||
+
|
||||
if (ngx_strncmp(cert->data, "data:", sizeof("data:") - 1) == 0) {
|
||||
|
||||
bio = BIO_new_mem_buf(cert->data + sizeof("data:") - 1,
|
||||
--
|
||||
2.26.3
|
||||
|
@ -1,41 +0,0 @@
|
||||
From a769a35a6197c76390e1dd8f5054d426fbbbda05 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Lubo=C5=A1=20Uhliarik?= <luhliari@redhat.com>
|
||||
Date: Wed, 22 Sep 2021 16:12:58 +0200
|
||||
Subject: [PATCH] Init openssl engine properly
|
||||
|
||||
---
|
||||
src/event/ngx_event_openssl.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
|
||||
index 270b200..f813458 100644
|
||||
--- a/src/event/ngx_event_openssl.c
|
||||
+++ b/src/event/ngx_event_openssl.c
|
||||
@@ -798,16 +798,24 @@ ngx_ssl_load_certificate_key(ngx_pool_t *pool, char **err,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+ if (!ENGINE_init(engine)) {
|
||||
+ *err = "ENGINE_init() failed";
|
||||
+ ENGINE_free(engine);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
*last++ = ':';
|
||||
|
||||
pkey = ENGINE_load_private_key(engine, (char *) last, 0, 0);
|
||||
|
||||
if (pkey == NULL) {
|
||||
*err = "ENGINE_load_private_key() failed";
|
||||
+ ENGINE_finish(engine);
|
||||
ENGINE_free(engine);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+ ENGINE_finish(engine);
|
||||
ENGINE_free(engine);
|
||||
|
||||
return pkey;
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,96 +0,0 @@
|
||||
From ee8ea4f1c88a0393206769cd30a545dc3375f868 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Lubo=C5=A1=20Uhliarik?= <luhliari@redhat.com>
|
||||
Date: Wed, 2 Feb 2022 20:14:55 +0100
|
||||
Subject: [PATCH] Fix ALPACA security issue
|
||||
|
||||
---
|
||||
src/mail/ngx_mail.h | 3 +++
|
||||
src/mail/ngx_mail_core_module.c | 10 ++++++++++
|
||||
src/mail/ngx_mail_handler.c | 15 ++++++++++++++-
|
||||
3 files changed, 27 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/mail/ngx_mail.h b/src/mail/ngx_mail.h
|
||||
index b865a3b..76cae37 100644
|
||||
--- a/src/mail/ngx_mail.h
|
||||
+++ b/src/mail/ngx_mail.h
|
||||
@@ -115,6 +115,8 @@ typedef struct {
|
||||
ngx_msec_t timeout;
|
||||
ngx_msec_t resolver_timeout;
|
||||
|
||||
+ ngx_uint_t max_errors;
|
||||
+
|
||||
ngx_str_t server_name;
|
||||
|
||||
u_char *file_name;
|
||||
@@ -231,6 +233,7 @@ typedef struct {
|
||||
ngx_uint_t command;
|
||||
ngx_array_t args;
|
||||
|
||||
+ ngx_uint_t errors;
|
||||
ngx_uint_t login_attempt;
|
||||
|
||||
/* used to parse POP3/IMAP/SMTP command */
|
||||
diff --git a/src/mail/ngx_mail_core_module.c b/src/mail/ngx_mail_core_module.c
|
||||
index 4083124..115671c 100644
|
||||
--- a/src/mail/ngx_mail_core_module.c
|
||||
+++ b/src/mail/ngx_mail_core_module.c
|
||||
@@ -85,6 +85,13 @@ static ngx_command_t ngx_mail_core_commands[] = {
|
||||
offsetof(ngx_mail_core_srv_conf_t, resolver_timeout),
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("max_errors"),
|
||||
+ NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE1,
|
||||
+ ngx_conf_set_num_slot,
|
||||
+ NGX_MAIL_SRV_CONF_OFFSET,
|
||||
+ offsetof(ngx_mail_core_srv_conf_t, max_errors),
|
||||
+ NULL },
|
||||
+
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
@@ -163,6 +170,8 @@ ngx_mail_core_create_srv_conf(ngx_conf_t *cf)
|
||||
cscf->timeout = NGX_CONF_UNSET_MSEC;
|
||||
cscf->resolver_timeout = NGX_CONF_UNSET_MSEC;
|
||||
|
||||
+ cscf->max_errors = NGX_CONF_UNSET_UINT;
|
||||
+
|
||||
cscf->resolver = NGX_CONF_UNSET_PTR;
|
||||
|
||||
cscf->file_name = cf->conf_file->file.name.data;
|
||||
@@ -182,6 +191,7 @@ ngx_mail_core_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
|
||||
ngx_conf_merge_msec_value(conf->resolver_timeout, prev->resolver_timeout,
|
||||
30000);
|
||||
|
||||
+ ngx_conf_merge_uint_value(conf->max_errors, prev->max_errors, 5);
|
||||
|
||||
ngx_conf_merge_str_value(conf->server_name, prev->server_name, "");
|
||||
|
||||
diff --git a/src/mail/ngx_mail_handler.c b/src/mail/ngx_mail_handler.c
|
||||
index 0aaa0e7..71b8151 100644
|
||||
--- a/src/mail/ngx_mail_handler.c
|
||||
+++ b/src/mail/ngx_mail_handler.c
|
||||
@@ -871,7 +871,20 @@ ngx_mail_read_command(ngx_mail_session_t *s, ngx_connection_t *c)
|
||||
return NGX_MAIL_PARSE_INVALID_COMMAND;
|
||||
}
|
||||
|
||||
- if (rc == NGX_IMAP_NEXT || rc == NGX_MAIL_PARSE_INVALID_COMMAND) {
|
||||
+ if (rc == NGX_MAIL_PARSE_INVALID_COMMAND) {
|
||||
+
|
||||
+ s->errors++;
|
||||
+
|
||||
+ if (s->errors >= cscf->max_errors) {
|
||||
+ ngx_log_error(NGX_LOG_INFO, c->log, 0,
|
||||
+ "client sent too many invalid commands");
|
||||
+ s->quit = 1;
|
||||
+ }
|
||||
+
|
||||
+ return rc;
|
||||
+ }
|
||||
+
|
||||
+ if (rc == NGX_IMAP_NEXT) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,74 +0,0 @@
|
||||
From b6aa9504cdfb6391d895dcbddc87b9260ea6968c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Lubo=C5=A1=20Uhliarik?= <luhliari@redhat.com>
|
||||
Date: Wed, 11 Oct 2023 09:59:23 +0200
|
||||
Subject: [PATCH] CVE-2023-44487 - HTTP/2: per-iteration stream handling limit.
|
||||
|
||||
To ensure that attempts to flood servers with many streams are detected
|
||||
early, a limit of no more than 2 * max_concurrent_streams new streams per one
|
||||
event loop iteration was introduced. This limit is applied even if
|
||||
max_concurrent_streams is not yet reached - for example, if corresponding
|
||||
streams are handled synchronously or reset.
|
||||
|
||||
Further, refused streams are now limited to maximum of max_concurrent_streams
|
||||
and 100, similarly to priority_limit initial value, providing some tolerance
|
||||
to clients trying to open several streams at the connection start, yet
|
||||
low tolerance to flooding attempts.
|
||||
---
|
||||
src/http/v2/ngx_http_v2.c | 15 +++++++++++++++
|
||||
src/http/v2/ngx_http_v2.h | 2 ++
|
||||
2 files changed, 17 insertions(+)
|
||||
|
||||
|
||||
diff --git a/src/http/v2/ngx_http_v2.c b/src/http/v2/ngx_http_v2.c
|
||||
index 3611a2e..291677a 100644
|
||||
--- a/src/http/v2/ngx_http_v2.c
|
||||
+++ b/src/http/v2/ngx_http_v2.c
|
||||
@@ -361,6 +361,7 @@ ngx_http_v2_read_handler(ngx_event_t *rev)
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http2 read handler");
|
||||
|
||||
h2c->blocked = 1;
|
||||
+ h2c->new_streams = 0;
|
||||
|
||||
if (c->close) {
|
||||
c->close = 0;
|
||||
@@ -1320,6 +1321,14 @@ ngx_http_v2_state_headers(ngx_http_v2_connection_t *h2c, u_char *pos,
|
||||
goto rst_stream;
|
||||
}
|
||||
|
||||
+ if (h2c->new_streams++ >= 2 * h2scf->concurrent_streams) {
|
||||
+ ngx_log_error(NGX_LOG_INFO, h2c->connection->log, 0,
|
||||
+ "client sent too many streams at once");
|
||||
+
|
||||
+ status = NGX_HTTP_V2_REFUSED_STREAM;
|
||||
+ goto rst_stream;
|
||||
+ }
|
||||
+
|
||||
if (!h2c->settings_ack
|
||||
&& !(h2c->state.flags & NGX_HTTP_V2_END_STREAM_FLAG)
|
||||
&& h2scf->preread_size < NGX_HTTP_V2_DEFAULT_WINDOW)
|
||||
@@ -1385,6 +1394,12 @@ ngx_http_v2_state_headers(ngx_http_v2_connection_t *h2c, u_char *pos,
|
||||
|
||||
rst_stream:
|
||||
|
||||
+ if (h2c->refused_streams++ > ngx_max(h2scf->concurrent_streams, 100)) {
|
||||
+ ngx_log_error(NGX_LOG_INFO, h2c->connection->log, 0,
|
||||
+ "client sent too many refused streams");
|
||||
+ return ngx_http_v2_connection_error(h2c, NGX_HTTP_V2_NO_ERROR);
|
||||
+ }
|
||||
+
|
||||
if (ngx_http_v2_send_rst_stream(h2c, h2c->state.sid, status) != NGX_OK) {
|
||||
return ngx_http_v2_connection_error(h2c, NGX_HTTP_V2_INTERNAL_ERROR);
|
||||
}
|
||||
diff --git a/src/http/v2/ngx_http_v2.h b/src/http/v2/ngx_http_v2.h
|
||||
index 3492297..6a7aaa6 100644
|
||||
--- a/src/http/v2/ngx_http_v2.h
|
||||
+++ b/src/http/v2/ngx_http_v2.h
|
||||
@@ -125,6 +125,8 @@ struct ngx_http_v2_connection_s {
|
||||
ngx_uint_t processing;
|
||||
ngx_uint_t frames;
|
||||
ngx_uint_t idle;
|
||||
+ ngx_uint_t new_streams;
|
||||
+ ngx_uint_t refused_streams;
|
||||
ngx_uint_t priority_limit;
|
||||
|
||||
ngx_uint_t pushing;
|
@ -1,183 +0,0 @@
|
||||
From f3bcc0bcfb6eda3f4874fe2531d546ba724c518c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Lubo=C5=A1=20Uhliarik?= <luhliari@redhat.com>
|
||||
Date: Wed, 12 Jun 2024 12:49:28 +0200
|
||||
Subject: [PATCH] Optimized chain link usage
|
||||
|
||||
Previously chain links could sometimes be dropped instead of being reused,
|
||||
which could result in increased memory consumption during long requests.
|
||||
---
|
||||
src/core/ngx_output_chain.c | 10 ++++++++--
|
||||
src/http/modules/ngx_http_grpc_module.c | 5 ++++-
|
||||
.../modules/ngx_http_gunzip_filter_module.c | 18 ++++++++++++++----
|
||||
src/http/modules/ngx_http_gzip_filter_module.c | 10 +++++++---
|
||||
src/http/modules/ngx_http_ssi_filter_module.c | 8 ++++++--
|
||||
src/http/modules/ngx_http_sub_filter_module.c | 8 ++++++--
|
||||
6 files changed, 45 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/core/ngx_output_chain.c b/src/core/ngx_output_chain.c
|
||||
index 5c3dbe8..4aa1b02 100644
|
||||
--- a/src/core/ngx_output_chain.c
|
||||
+++ b/src/core/ngx_output_chain.c
|
||||
@@ -121,7 +121,10 @@ ngx_output_chain(ngx_output_chain_ctx_t *ctx, ngx_chain_t *in)
|
||||
|
||||
ngx_debug_point();
|
||||
|
||||
- ctx->in = ctx->in->next;
|
||||
+ cl = ctx->in;
|
||||
+ ctx->in = cl->next;
|
||||
+
|
||||
+ ngx_free_chain(ctx->pool, cl);
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -207,7 +210,10 @@ ngx_output_chain(ngx_output_chain_ctx_t *ctx, ngx_chain_t *in)
|
||||
/* delete the completed buf from the ctx->in chain */
|
||||
|
||||
if (ngx_buf_size(ctx->in->buf) == 0) {
|
||||
- ctx->in = ctx->in->next;
|
||||
+ cl = ctx->in;
|
||||
+ ctx->in = cl->next;
|
||||
+
|
||||
+ ngx_free_chain(ctx->pool, cl);
|
||||
}
|
||||
|
||||
cl = ngx_alloc_chain_link(ctx->pool);
|
||||
diff --git a/src/http/modules/ngx_http_grpc_module.c b/src/http/modules/ngx_http_grpc_module.c
|
||||
index 53bc547..9f13089 100644
|
||||
--- a/src/http/modules/ngx_http_grpc_module.c
|
||||
+++ b/src/http/modules/ngx_http_grpc_module.c
|
||||
@@ -1230,7 +1230,7 @@ ngx_http_grpc_body_output_filter(void *data, ngx_chain_t *in)
|
||||
ngx_buf_t *b;
|
||||
ngx_int_t rc;
|
||||
ngx_uint_t next, last;
|
||||
- ngx_chain_t *cl, *out, **ll;
|
||||
+ ngx_chain_t *cl, *out, *ln, **ll;
|
||||
ngx_http_upstream_t *u;
|
||||
ngx_http_grpc_ctx_t *ctx;
|
||||
ngx_http_grpc_frame_t *f;
|
||||
@@ -1458,7 +1458,10 @@ ngx_http_grpc_body_output_filter(void *data, ngx_chain_t *in)
|
||||
last = 1;
|
||||
}
|
||||
|
||||
+ ln = in;
|
||||
in = in->next;
|
||||
+
|
||||
+ ngx_free_chain(r->pool, ln);
|
||||
}
|
||||
|
||||
ctx->in = in;
|
||||
diff --git a/src/http/modules/ngx_http_gunzip_filter_module.c b/src/http/modules/ngx_http_gunzip_filter_module.c
|
||||
index c1341f5..5d170a1 100644
|
||||
--- a/src/http/modules/ngx_http_gunzip_filter_module.c
|
||||
+++ b/src/http/modules/ngx_http_gunzip_filter_module.c
|
||||
@@ -333,6 +333,8 @@ static ngx_int_t
|
||||
ngx_http_gunzip_filter_add_data(ngx_http_request_t *r,
|
||||
ngx_http_gunzip_ctx_t *ctx)
|
||||
{
|
||||
+ ngx_chain_t *cl;
|
||||
+
|
||||
if (ctx->zstream.avail_in || ctx->flush != Z_NO_FLUSH || ctx->redo) {
|
||||
return NGX_OK;
|
||||
}
|
||||
@@ -344,8 +346,11 @@ ngx_http_gunzip_filter_add_data(ngx_http_request_t *r,
|
||||
return NGX_DECLINED;
|
||||
}
|
||||
|
||||
- ctx->in_buf = ctx->in->buf;
|
||||
- ctx->in = ctx->in->next;
|
||||
+ cl = ctx->in;
|
||||
+ ctx->in_buf = cl->buf;
|
||||
+ ctx->in = cl->next;
|
||||
+
|
||||
+ ngx_free_chain(r->pool, cl);
|
||||
|
||||
ctx->zstream.next_in = ctx->in_buf->pos;
|
||||
ctx->zstream.avail_in = ctx->in_buf->last - ctx->in_buf->pos;
|
||||
@@ -374,6 +379,7 @@ static ngx_int_t
|
||||
ngx_http_gunzip_filter_get_buf(ngx_http_request_t *r,
|
||||
ngx_http_gunzip_ctx_t *ctx)
|
||||
{
|
||||
+ ngx_chain_t *cl;
|
||||
ngx_http_gunzip_conf_t *conf;
|
||||
|
||||
if (ctx->zstream.avail_out) {
|
||||
@@ -383,8 +389,12 @@ ngx_http_gunzip_filter_get_buf(ngx_http_request_t *r,
|
||||
conf = ngx_http_get_module_loc_conf(r, ngx_http_gunzip_filter_module);
|
||||
|
||||
if (ctx->free) {
|
||||
- ctx->out_buf = ctx->free->buf;
|
||||
- ctx->free = ctx->free->next;
|
||||
+
|
||||
+ cl = ctx->free;
|
||||
+ ctx->out_buf = cl->buf;
|
||||
+ ctx->free = cl->next;
|
||||
+
|
||||
+ ngx_free_chain(r->pool, cl);
|
||||
|
||||
ctx->out_buf->flush = 0;
|
||||
|
||||
diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c
|
||||
index b8c5ccc..1d17a6d 100644
|
||||
--- a/src/http/modules/ngx_http_gzip_filter_module.c
|
||||
+++ b/src/http/modules/ngx_http_gzip_filter_module.c
|
||||
@@ -978,10 +978,14 @@ static void
|
||||
ngx_http_gzip_filter_free_copy_buf(ngx_http_request_t *r,
|
||||
ngx_http_gzip_ctx_t *ctx)
|
||||
{
|
||||
- ngx_chain_t *cl;
|
||||
+ ngx_chain_t *cl, *ln;
|
||||
+
|
||||
+ for (cl = ctx->copied; cl; /* void */) {
|
||||
+ ln = cl;
|
||||
+ cl = cl->next;
|
||||
|
||||
- for (cl = ctx->copied; cl; cl = cl->next) {
|
||||
- ngx_pfree(r->pool, cl->buf->start);
|
||||
+ ngx_pfree(r->pool, ln->buf->start);
|
||||
+ ngx_free_chain(r->pool, ln);
|
||||
}
|
||||
|
||||
ctx->copied = NULL;
|
||||
diff --git a/src/http/modules/ngx_http_ssi_filter_module.c b/src/http/modules/ngx_http_ssi_filter_module.c
|
||||
index 6737965..a55f6e5 100644
|
||||
--- a/src/http/modules/ngx_http_ssi_filter_module.c
|
||||
+++ b/src/http/modules/ngx_http_ssi_filter_module.c
|
||||
@@ -455,9 +455,13 @@ ngx_http_ssi_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
||||
while (ctx->in || ctx->buf) {
|
||||
|
||||
if (ctx->buf == NULL) {
|
||||
- ctx->buf = ctx->in->buf;
|
||||
- ctx->in = ctx->in->next;
|
||||
+
|
||||
+ cl = ctx->in;
|
||||
+ ctx->buf = cl->buf;
|
||||
+ ctx->in = cl->next;
|
||||
ctx->pos = ctx->buf->pos;
|
||||
+
|
||||
+ ngx_free_chain(r->pool, cl);
|
||||
}
|
||||
|
||||
if (ctx->state == ssi_start_state) {
|
||||
diff --git a/src/http/modules/ngx_http_sub_filter_module.c b/src/http/modules/ngx_http_sub_filter_module.c
|
||||
index 6d3de59..456bb27 100644
|
||||
--- a/src/http/modules/ngx_http_sub_filter_module.c
|
||||
+++ b/src/http/modules/ngx_http_sub_filter_module.c
|
||||
@@ -335,9 +335,13 @@ ngx_http_sub_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
||||
while (ctx->in || ctx->buf) {
|
||||
|
||||
if (ctx->buf == NULL) {
|
||||
- ctx->buf = ctx->in->buf;
|
||||
- ctx->in = ctx->in->next;
|
||||
+
|
||||
+ cl = ctx->in;
|
||||
+ ctx->buf = cl->buf;
|
||||
+ ctx->in = cl->next;
|
||||
ctx->pos = ctx->buf->pos;
|
||||
+
|
||||
+ ngx_free_chain(r->pool, cl);
|
||||
}
|
||||
|
||||
if (ctx->buf->flush || ctx->buf->recycled) {
|
||||
--
|
||||
2.44.0
|
||||
|
@ -0,0 +1,117 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<title>Test Page for the Nginx HTTP Server on Red Hat Enterprise Linux</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<style type="text/css">
|
||||
/*<![CDATA[*/
|
||||
body {
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
font-size: 0.9em;
|
||||
font-family: sans-serif,helvetica;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
:link {
|
||||
color: #c00;
|
||||
}
|
||||
:visited {
|
||||
color: #c00;
|
||||
}
|
||||
a:hover {
|
||||
color: #f50;
|
||||
}
|
||||
h1 {
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 0.6em 2em 0.4em;
|
||||
background-color: #900;
|
||||
color: #fff;
|
||||
font-weight: normal;
|
||||
font-size: 1.75em;
|
||||
border-bottom: 2px solid #000;
|
||||
}
|
||||
h1 strong {
|
||||
font-weight: bold;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
h2 {
|
||||
text-align: center;
|
||||
background-color: #900;
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
margin: 0;
|
||||
padding: 0.5em;
|
||||
border-bottom: 2px solid #000;
|
||||
}
|
||||
hr {
|
||||
display: none;
|
||||
}
|
||||
.content {
|
||||
padding: 1em 5em;
|
||||
}
|
||||
.alert {
|
||||
border: 2px solid #000;
|
||||
}
|
||||
|
||||
img {
|
||||
border: 2px solid #fff;
|
||||
padding: 2px;
|
||||
margin: 2px;
|
||||
}
|
||||
a:hover img {
|
||||
border: 2px solid #294172;
|
||||
}
|
||||
.logos {
|
||||
margin: 1em;
|
||||
text-align: center;
|
||||
}
|
||||
/*]]>*/
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Welcome to <strong>nginx</strong> on Red Hat Enterprise Linux!</h1>
|
||||
|
||||
<div class="content">
|
||||
<p>This page is used to test the proper operation of the
|
||||
<strong>nginx</strong> HTTP server after it has been
|
||||
installed. If you can read this page, it means that the
|
||||
web server installed at this site is working
|
||||
properly.</p>
|
||||
|
||||
<div class="alert">
|
||||
<h2>Website Administrator</h2>
|
||||
<div class="content">
|
||||
<p>This is the default <tt>index.html</tt> page that
|
||||
is distributed with <strong>nginx</strong> on
|
||||
Red Hat Enterprise Linux. It is located in
|
||||
<tt>/usr/share/nginx/html</tt>.</p>
|
||||
|
||||
<p>You should now put your content in a location of
|
||||
your choice and edit the <tt>root</tt> configuration
|
||||
directive in the <strong>nginx</strong>
|
||||
configuration file
|
||||
<tt>/etc/nginx/nginx.conf</tt>.</p>
|
||||
|
||||
<p>For information on Red Hat Enterprise Linux, please visit the <a href="http://www.redhat.com/">Red Hat, Inc. website</a>. The documentation for Red Hat Enterprise Linux is <a href="http://www.redhat.com/docs/manuals/enterprise/">available on the Red Hat, Inc. website</a>.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="logos">
|
||||
<a href="http://nginx.net/"><img
|
||||
src="nginx-logo.png"
|
||||
alt="[ Powered by nginx ]"
|
||||
width="121" height="32" /></a>
|
||||
<a href="http://www.redhat.com/"><img
|
||||
src="poweredby.png"
|
||||
alt="[ Powered by Red Hat Enterprise Linux ]"
|
||||
width="88" height="31" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,20 +0,0 @@
|
||||
%_nginx_abiversion @@NGINX_ABIVERSION@@
|
||||
%_nginx_srcdir @@NGINX_SRCDIR@@
|
||||
%_nginx_buildsrcdir nginx-src
|
||||
%_nginx_modsrcdir ..
|
||||
%_nginx_modbuilddir ../%{_vpath_builddir}
|
||||
%nginx_moddir @@NGINX_MODDIR@@
|
||||
%nginx_modconfdir @@NGINX_MODCONFDIR@@
|
||||
|
||||
%nginx_modrequires Requires: nginx(abi) = %{_nginx_abiversion}
|
||||
|
||||
%nginx_modconfigure(:-:) \\\
|
||||
%undefine _strict_symbol_defs_build \
|
||||
cp -a "%{_nginx_srcdir}" "%{_nginx_buildsrcdir}" \
|
||||
cd "%{_nginx_buildsrcdir}" \
|
||||
nginx_ldopts="$RPM_LD_FLAGS -Wl,-E" \
|
||||
./configure --with-compat --with-cc-opt="%{optflags} $(pcre-config --cflags)" --with-ld-opt="$nginx_ldopts" \\\
|
||||
--add-dynamic-module=$(realpath %{_nginx_modsrcdir}) --builddir=$(realpath %{_nginx_modbuilddir}) %{**} \
|
||||
cd -
|
||||
|
||||
%nginx_modbuild %{__make} -C "%{_nginx_buildsrcdir}" %{_make_output_sync} %{?_smp_mflags} %{_make_verbose} modules
|
@ -1,69 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
yh4LsaVRdhbFe9aNd/O5iNgDcQtCUg==
|
||||
=/pFc
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
@ -1,33 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.11 (FreeBSD)
|
||||
|
||||
mQENBE7SKu8BCADQo6x4ZQfAcPlJMLmL8zBEBUS6GyKMMMDtrTh3Yaq481HB54oR
|
||||
0cpKL05Ff9upjrIzLD5TJUCzYYM9GQOhguDUP8+ZU9JpSz3yO2TvH7WBbUZ8FADf
|
||||
hblmmUBLNgOWgLo3W+FYhl3mz1GFS2Fvid6Tfn02L8CBAj7jxbjL1Qj/OA/WmLLc
|
||||
m6BMTqI7IBlYW2vyIOIHasISGiAwZfp0ucMeXXvTtt14LGa8qXVcFnJTdwbf03AS
|
||||
ljhYrQnKnpl3VpDAoQt8C68YCwjaNJW59hKqWB+XeIJ9CW98+EOAxLAFszSyGanp
|
||||
rCqPd0numj9TIddjcRkTA/ZbmCWK+xjpVBGXABEBAAG0IU1heGltIERvdW5pbiA8
|
||||
bWRvdW5pbkBtZG91bmluLnJ1PokBOAQTAQIAIgUCTtIq7wIbAwYLCQgHAwIGFQgC
|
||||
CQoLBBYCAwECHgECF4AACgkQUgqZk6HAUvj+iwf/b4FS6zVzJ5T0v1vcQGD4ZzXe
|
||||
D5xMC4BJW414wVMU15rfX7aCdtoCYBNiApPxEd7SwiyxWRhRA9bikUq87JEgmnyV
|
||||
0iYbHZvCvc1jOkx4WR7E45t1Mi29KBoPaFXA9X5adZkYcOQLDxa2Z8m6LGXnlF6N
|
||||
tJkxQ8APrjZsdrbDvo3HxU9muPcq49ydzhgwfLwpUs11LYkwB0An9WRPuv3jporZ
|
||||
/XgI6RfPMZ5NIx+FRRCjn6DnfHboY9rNF6NzrOReJRBhXCi6I+KkHHEnMoyg8XET
|
||||
9lVkfHTOl81aIZqrAloX3/00TkYWyM2zO9oYpOg6eUFCX/Lw4MJZsTcT5EKVxIhG
|
||||
BBARAgAGBQJO01Y/AAoJEOzw6QssFyCDVyQAn3qwTZlcZgyyzWu9Cs8gJ0CXREaS
|
||||
AJ92QjGLT9DijTcbB+q9OS/nl16Z/IhGBBARAgAGBQJO02JDAAoJEKk3YTmlJMU+
|
||||
P64AnjCKEXFelSVMtgefJk3+vpyt3QX1AKCH9M3MbTWPeDUL+MpULlfdyfvjj7kB
|
||||
DQRO0irvAQgA0LjCc8S6oZzjiap2MjRNhRFA5BYjXZRZBdKF2VP74avt2/RELq8G
|
||||
W0n7JWmKn6vvrXabEGLyfkCngAhTq9tJ/K7LPx/bmlO5+jboO/1inH2BTtLiHjAX
|
||||
vicXZk3oaZt2Sotx5mMI3yzpFQRVqZXsi0LpUTPJEh3oS8IdYRjslQh1A7P5hfCZ
|
||||
wtzwb/hKm8upODe/ITUMuXeWfLuQj/uEU6wMzmfMHb+jlYMWtb+v98aJa2FODeKP
|
||||
mWCXLa7bliXp1SSeBOEfIgEAmjM6QGlDx5sZhr2Ss2xSPRdZ8DqD7oiRVzmstX1Y
|
||||
oxEzC0yXfaefC7SgM0nMnaTvYEOYJ9CH3wARAQABiQEfBBgBAgAJBQJO0irvAhsM
|
||||
AAoJEFIKmZOhwFL4844H/jo8icCcS6eOWvnen7lg0FcCo1fIm4wW3tEmkQdchSHE
|
||||
CJDq7pgTloN65pwB5tBoT47cyYNZA9eTfJVgRc74q5cexKOYrMC3KuAqWbwqXhkV
|
||||
s0nkWxnOIidTHSXvBZfDFA4Idwte94Thrzf8Pn8UESudTiqrWoCBXk2UyVsl03gJ
|
||||
blSJAeJGYPPeo+Yj6m63OWe2+/S2VTgmbPS/RObn0Aeg7yuff0n5+ytEt2KL51gO
|
||||
QE2uIxTCawHr12PsllPkbqPk/PagIttfEJqn9b0CrqPC3HREePb2aMJ/Ctw/76CO
|
||||
wn0mtXeIXLCTvBmznXfaMKllsqbsy2nCJ2P2uJjOntw=
|
||||
=Tavt
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
@ -0,0 +1,13 @@
|
||||
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
|
||||
index aee7a58..bcceecb 100644
|
||||
--- a/src/core/ngx_cycle.c
|
||||
+++ b/src/core/ngx_cycle.c
|
||||
@@ -1108,7 +1108,7 @@ ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
|
||||
}
|
||||
|
||||
fd = ngx_open_file(file[i].name.data, NGX_FILE_APPEND,
|
||||
- NGX_FILE_CREATE_OR_OPEN, NGX_FILE_DEFAULT_ACCESS);
|
||||
+ NGX_FILE_CREATE_OR_OPEN, NGX_FILE_DEFAULT_ACCESS | 0220);
|
||||
|
||||
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||
"reopen file \"%s\", old:%d new:%d",
|
@ -0,0 +1,42 @@
|
||||
# HG changeset patch
|
||||
# User Anderson Sasaki <ansasaki@redhat.com>
|
||||
# Date 1533742801 -7200
|
||||
# Wed Aug 08 17:40:01 2018 +0200
|
||||
# Node ID ae457c9b2967da1b05aefcf1e81c099e9375c0d7
|
||||
# Parent ba971deb4b447662e3c47fcc860b34d43469162a
|
||||
SSL: added ENGINE_init() call before loading key.
|
||||
|
||||
It is necessary to call ENGINE_init() before using an OpenSSL engine
|
||||
to get the engine functional reference. Without this, when
|
||||
ENGINE_load_private_key() is called, the engine is still uninitialized.
|
||||
|
||||
diff -r ba971deb4b44 -r ae457c9b2967 src/event/ngx_event_openssl.c
|
||||
--- a/src/event/ngx_event_openssl.c Tue Aug 07 02:16:07 2018 +0300
|
||||
+++ b/src/event/ngx_event_openssl.c Wed Aug 08 17:40:01 2018 +0200
|
||||
@@ -533,6 +533,13 @@
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
+ if (!ENGINE_init(engine)) {
|
||||
+ ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
|
||||
+ "ENGINE_init(\"%s\") failed", p);
|
||||
+ ENGINE_free(engine);
|
||||
+ return NGX_ERROR;
|
||||
+ }
|
||||
+
|
||||
*last++ = ':';
|
||||
|
||||
pkey = ENGINE_load_private_key(engine, (char *) last, 0, 0);
|
||||
@@ -540,10 +547,12 @@
|
||||
if (pkey == NULL) {
|
||||
ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
|
||||
"ENGINE_load_private_key(\"%s\") failed", last);
|
||||
+ ENGINE_finish(engine);
|
||||
ENGINE_free(engine);
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
+ ENGINE_finish(engine);
|
||||
ENGINE_free(engine);
|
||||
|
||||
if (SSL_CTX_use_PrivateKey(ssl->ctx, pkey) == 0) {
|
@ -0,0 +1,70 @@
|
||||
diff --git a/src/http/v2/ngx_http_v2.c b/src/http/v2/ngx_http_v2.c
|
||||
index 12214e1..3b7f892 100644
|
||||
--- a/src/http/v2/ngx_http_v2.c
|
||||
+++ b/src/http/v2/ngx_http_v2.c
|
||||
@@ -4335,6 +4335,8 @@ ngx_http_v2_close_stream(ngx_http_v2_stream_t *stream, ngx_int_t rc)
|
||||
*/
|
||||
pool = stream->pool;
|
||||
|
||||
+ h2c->frames -= stream->frames;
|
||||
+
|
||||
ngx_http_free_request(stream->request, rc);
|
||||
|
||||
if (pool != h2c->state.pool) {
|
||||
diff --git a/src/http/v2/ngx_http_v2.h b/src/http/v2/ngx_http_v2.h
|
||||
index bec2216..715b7d3 100644
|
||||
--- a/src/http/v2/ngx_http_v2.h
|
||||
+++ b/src/http/v2/ngx_http_v2.h
|
||||
@@ -192,6 +192,8 @@ struct ngx_http_v2_stream_s {
|
||||
|
||||
ngx_buf_t *preread;
|
||||
|
||||
+ ngx_uint_t frames;
|
||||
+
|
||||
ngx_http_v2_out_frame_t *free_frames;
|
||||
ngx_chain_t *free_frame_headers;
|
||||
ngx_chain_t *free_bufs;
|
||||
diff --git a/src/http/v2/ngx_http_v2_filter_module.c b/src/http/v2/ngx_http_v2_filter_module.c
|
||||
index 029e8ec..c7ee553 100644
|
||||
--- a/src/http/v2/ngx_http_v2_filter_module.c
|
||||
+++ b/src/http/v2/ngx_http_v2_filter_module.c
|
||||
@@ -1661,22 +1661,34 @@ static ngx_http_v2_out_frame_t *
|
||||
ngx_http_v2_filter_get_data_frame(ngx_http_v2_stream_t *stream,
|
||||
size_t len, ngx_chain_t *first, ngx_chain_t *last)
|
||||
{
|
||||
- u_char flags;
|
||||
- ngx_buf_t *buf;
|
||||
- ngx_chain_t *cl;
|
||||
- ngx_http_v2_out_frame_t *frame;
|
||||
+ u_char flags;
|
||||
+ ngx_buf_t *buf;
|
||||
+ ngx_chain_t *cl;
|
||||
+ ngx_http_v2_out_frame_t *frame;
|
||||
+ ngx_http_v2_connection_t *h2c;
|
||||
|
||||
frame = stream->free_frames;
|
||||
+ h2c = stream->connection;
|
||||
|
||||
if (frame) {
|
||||
stream->free_frames = frame->next;
|
||||
|
||||
- } else {
|
||||
+ } else if (h2c->frames < 10000) {
|
||||
frame = ngx_palloc(stream->request->pool,
|
||||
sizeof(ngx_http_v2_out_frame_t));
|
||||
if (frame == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
+
|
||||
+ stream->frames++;
|
||||
+ h2c->frames++;
|
||||
+
|
||||
+ } else {
|
||||
+ ngx_log_error(NGX_LOG_INFO, h2c->connection->log, 0,
|
||||
+ "http2 flood detected");
|
||||
+
|
||||
+ h2c->connection->error = 1;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
flags = last->buf->last_buf ? NGX_HTTP_V2_END_STREAM_FLAG : 0;
|
@ -0,0 +1,47 @@
|
||||
diff --git a/src/http/v2/ngx_http_v2.c b/src/http/v2/ngx_http_v2.c
|
||||
index 3b7f892..0aaea47 100644
|
||||
--- a/src/http/v2/ngx_http_v2.c
|
||||
+++ b/src/http/v2/ngx_http_v2.c
|
||||
@@ -275,6 +275,7 @@ ngx_http_v2_init(ngx_event_t *rev)
|
||||
h2scf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_v2_module);
|
||||
|
||||
h2c->concurrent_pushes = h2scf->concurrent_pushes;
|
||||
+ h2c->priority_limit = h2scf->concurrent_streams;
|
||||
|
||||
h2c->pool = ngx_create_pool(h2scf->pool_size, h2c->connection->log);
|
||||
if (h2c->pool == NULL) {
|
||||
@@ -1798,6 +1799,13 @@ ngx_http_v2_state_priority(ngx_http_v2_connection_t *h2c, u_char *pos,
|
||||
return ngx_http_v2_connection_error(h2c, NGX_HTTP_V2_SIZE_ERROR);
|
||||
}
|
||||
|
||||
+ if (--h2c->priority_limit == 0) {
|
||||
+ ngx_log_error(NGX_LOG_INFO, h2c->connection->log, 0,
|
||||
+ "client sent too many PRIORITY frames");
|
||||
+
|
||||
+ return ngx_http_v2_connection_error(h2c, NGX_HTTP_V2_ENHANCE_YOUR_CALM);
|
||||
+ }
|
||||
+
|
||||
if (end - pos < NGX_HTTP_V2_PRIORITY_SIZE) {
|
||||
return ngx_http_v2_state_save(h2c, pos, end,
|
||||
ngx_http_v2_state_priority);
|
||||
@@ -3112,6 +3120,8 @@ ngx_http_v2_create_stream(ngx_http_v2_connection_t *h2c, ngx_uint_t push)
|
||||
h2c->processing++;
|
||||
}
|
||||
|
||||
+ h2c->priority_limit += h2scf->concurrent_streams;
|
||||
+
|
||||
return stream;
|
||||
}
|
||||
|
||||
diff --git a/src/http/v2/ngx_http_v2.h b/src/http/v2/ngx_http_v2.h
|
||||
index 715b7d3..69d55d1 100644
|
||||
--- a/src/http/v2/ngx_http_v2.h
|
||||
+++ b/src/http/v2/ngx_http_v2.h
|
||||
@@ -122,6 +122,7 @@ struct ngx_http_v2_connection_s {
|
||||
ngx_uint_t processing;
|
||||
ngx_uint_t frames;
|
||||
ngx_uint_t idle;
|
||||
+ ngx_uint_t priority_limit;
|
||||
|
||||
ngx_uint_t pushing;
|
||||
ngx_uint_t concurrent_pushes;
|
@ -0,0 +1,30 @@
|
||||
diff --git a/src/http/v2/ngx_http_v2.c b/src/http/v2/ngx_http_v2.c
|
||||
index 0aaea47..fd6ecb0 100644
|
||||
--- a/src/http/v2/ngx_http_v2.c
|
||||
+++ b/src/http/v2/ngx_http_v2.c
|
||||
@@ -1549,6 +1549,14 @@ ngx_http_v2_state_process_header(ngx_http_v2_connection_t *h2c, u_char *pos,
|
||||
header->name.len = h2c->state.field_end - h2c->state.field_start;
|
||||
header->name.data = h2c->state.field_start;
|
||||
|
||||
+ if (header->name.len == 0) {
|
||||
+ ngx_log_error(NGX_LOG_INFO, h2c->connection->log, 0,
|
||||
+ "client sent zero header name length");
|
||||
+
|
||||
+ return ngx_http_v2_connection_error(h2c,
|
||||
+ NGX_HTTP_V2_PROTOCOL_ERROR);
|
||||
+ }
|
||||
+
|
||||
return ngx_http_v2_state_field_len(h2c, pos, end);
|
||||
}
|
||||
|
||||
@@ -3259,10 +3267,6 @@ ngx_http_v2_validate_header(ngx_http_request_t *r, ngx_http_v2_header_t *header)
|
||||
ngx_uint_t i;
|
||||
ngx_http_core_srv_conf_t *cscf;
|
||||
|
||||
- if (header->name.len == 0) {
|
||||
- return NGX_ERROR;
|
||||
- }
|
||||
-
|
||||
r->invalid_header = 0;
|
||||
|
||||
cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
|
@ -1,10 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQEcBAABCAAGBQJgrPDQAAoJEFIKmZOhwFL4dlIH/RFvUn4wiazXVujdm1df2/Q5
|
||||
b+NVlr+O9WZ2Mb35dooOshG/G2wVjI95Cd5NU6svulJ05uv6tGgHA0CUZP6PLqIm
|
||||
4os5QcgbEbfdDbfQEw7wyc831DqiBPwzk/xt954vsqwzX3mkXvUNTEYpynguwN1J
|
||||
2iMb/bFRSlLZkKGbKOmLMO7iav0r88qtpmQIzG1mFTDg3leH0q3hEMAJl7pIicYd
|
||||
Of3+/EHnM8CXORtA1q6YTLbcHAzhSmjdrMyw+RQGQkxoPtdj9vwL4Z6Wk8+6dDK7
|
||||
dVBaiKp80tDM/iJizPbkbrBVbnR/9W48+QBC7tmOJMuj2c1Q/kvwJg9CLyHlqCU=
|
||||
=tPti
|
||||
-----END PGP SIGNATURE-----
|
@ -0,0 +1,13 @@
|
||||
--- auto/cc/gcc.orig 2007-03-22 08:34:53.000000000 -0600
|
||||
+++ auto/cc/gcc 2007-03-22 08:58:47.000000000 -0600
|
||||
@@ -172,7 +172,9 @@
|
||||
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+# This combined with Fedora's FORTIFY_SOURCE=2 option causes it nginx
|
||||
+# to not compile.
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
After Width: | Height: | Size: 368 B |
@ -1,14 +0,0 @@
|
||||
%__nginxmods_requires() %{lua:
|
||||
-- Match buildroot paths of the form
|
||||
-- /PATH/OF/BUILDROOT/usr/lib/nginx/modules/ and
|
||||
-- /PATH/OF/BUILDROOT/usr/lib64/nginx/modules/
|
||||
-- generating a line of the form:
|
||||
-- nginx(abi) = VERSION
|
||||
local path = rpm.expand("%1")
|
||||
if path:match("/usr/lib%d*/nginx/modules/.*") then
|
||||
local requires = "nginx(abi) = " .. rpm.expand("%{_nginx_abiversion}")
|
||||
print(requires)
|
||||
end
|
||||
}
|
||||
|
||||
%__nginxmods_path ^%{_prefix}/lib(64)?/nginx/modules/.*\\.so$
|
@ -1,41 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.11 (FreeBSD)
|
||||
|
||||
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
|
||||
CoHAyoqJeb/xLBwuKWg0/4U=
|
||||
=iFlP
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
Loading…
Reference in new issue