Latest update - 7431
This commit is contained in:
@@ -1848,6 +1848,10 @@ ngx_ssl_recv_early(ngx_connection_t *c, u_char *buf, size_t size)
|
|||||||
buf += 1;
|
buf += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (c->ssl->write_blocked) {
|
||||||
|
return NGX_AGAIN;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SSL_read_early_data() may return data in parts, so try to read
|
* SSL_read_early_data() may return data in parts, so try to read
|
||||||
* until SSL_read_early_data() would return no data
|
* until SSL_read_early_data() would return no data
|
||||||
@@ -2386,6 +2390,11 @@ ngx_ssl_write_early(ngx_connection_t *c, u_char *data, size_t size)
|
|||||||
ngx_post_event(c->read, &ngx_posted_events);
|
ngx_post_event(c->read, &ngx_posted_events);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (c->ssl->write_blocked) {
|
||||||
|
c->ssl->write_blocked = 0;
|
||||||
|
ngx_post_event(c->read, &ngx_posted_events);
|
||||||
|
}
|
||||||
|
|
||||||
c->sent += written;
|
c->sent += written;
|
||||||
|
|
||||||
return written;
|
return written;
|
||||||
@@ -2399,6 +2408,9 @@ ngx_ssl_write_early(ngx_connection_t *c, u_char *data, size_t size)
|
|||||||
|
|
||||||
if (sslerr == SSL_ERROR_WANT_WRITE) {
|
if (sslerr == SSL_ERROR_WANT_WRITE) {
|
||||||
|
|
||||||
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,
|
||||||
|
"SSL_write_early_data: want write");
|
||||||
|
|
||||||
if (c->ssl->saved_read_handler) {
|
if (c->ssl->saved_read_handler) {
|
||||||
|
|
||||||
c->read->handler = c->ssl->saved_read_handler;
|
c->read->handler = c->ssl->saved_read_handler;
|
||||||
@@ -2412,6 +2424,14 @@ ngx_ssl_write_early(ngx_connection_t *c, u_char *data, size_t size)
|
|||||||
ngx_post_event(c->read, &ngx_posted_events);
|
ngx_post_event(c->read, &ngx_posted_events);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OpenSSL 1.1.1a fails to handle SSL_read_early_data()
|
||||||
|
* if an SSL_write_early_data() call blocked on writing,
|
||||||
|
* see https://github.com/openssl/openssl/issues/7757
|
||||||
|
*/
|
||||||
|
|
||||||
|
c->ssl->write_blocked = 1;
|
||||||
|
|
||||||
c->write->ready = 0;
|
c->write->ready = 0;
|
||||||
return NGX_AGAIN;
|
return NGX_AGAIN;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ struct ngx_ssl_connection_s {
|
|||||||
unsigned try_early_data:1;
|
unsigned try_early_data:1;
|
||||||
unsigned in_early:1;
|
unsigned in_early:1;
|
||||||
unsigned early_preread:1;
|
unsigned early_preread:1;
|
||||||
|
unsigned write_blocked:1;
|
||||||
|
|
||||||
ngx_ssl_dyn_rec_t dyn_rec;
|
ngx_ssl_dyn_rec_t dyn_rec;
|
||||||
ngx_msec_t dyn_rec_last_write;
|
ngx_msec_t dyn_rec_last_write;
|
||||||
|
|||||||
Reference in New Issue
Block a user