BUG/MEDIUM: ssl: Make sure we initiate the handshake after using early data.

When we're done sending/receiving early data, and we add the handshake
flags on the connection, make sure we wake the associated tasklet up, so that
the handshake will be initiated.
This commit is contained in:
Olivier Houchard 2019-06-15 20:59:30 +02:00
parent 09e0d7422e
commit 965e84e2df
1 changed files with 7 additions and 1 deletions

View File

@ -5761,6 +5761,8 @@ static size_t ssl_sock_to_buf(struct connection *conn, void *xprt_ctx, struct bu
conn->flags &= ~CO_FL_EARLY_SSL_HS; conn->flags &= ~CO_FL_EARLY_SSL_HS;
conn->flags |= CO_FL_SSL_WAIT_HS; conn->flags |= CO_FL_SSL_WAIT_HS;
need_out = 1; need_out = 1;
/* Now initiate the handshake */
tasklet_wakeup(ctx->wait_event.tasklet);
if (read_length == 0) if (read_length == 0)
break; break;
} }
@ -5920,6 +5922,7 @@ static size_t ssl_sock_from_buf(struct connection *conn, void *xprt_ctx, const s
try -= (try + ctx->sent_early_data) - max_early; try -= (try + ctx->sent_early_data) - max_early;
if (try <= 0) { if (try <= 0) {
conn->flags |= CO_FL_SSL_WAIT_HS | CO_FL_WAIT_L6_CONN; conn->flags |= CO_FL_SSL_WAIT_HS | CO_FL_WAIT_L6_CONN;
tasklet_wakeup(ctx->wait_event.tasklet);
break; break;
} }
} }
@ -5927,8 +5930,11 @@ static size_t ssl_sock_from_buf(struct connection *conn, void *xprt_ctx, const s
if (ret == 1) { if (ret == 1) {
ret = written_data; ret = written_data;
ctx->sent_early_data += ret; ctx->sent_early_data += ret;
if (objt_server(conn->target)) if (objt_server(conn->target)) {
conn->flags |= CO_FL_SSL_WAIT_HS | CO_FL_WAIT_L6_CONN | CO_FL_EARLY_DATA; conn->flags |= CO_FL_SSL_WAIT_HS | CO_FL_WAIT_L6_CONN | CO_FL_EARLY_DATA;
/* Initiate the handshake, now */
tasklet_wakeup(ctx->wait_event.tasklet);
}
} }