[Remove entries to the current 2.0 section below, when backported]
+ *) mod_ssl: Fix segfaults after renegotiation failure. PR 21370
+ [Hartmut Keil <Hartmut.Keil@adnovum.ch>]
+
*) ab: Overlong credentials given via command line no longer clobber
the buffer. [André Malo]
apr_size_t len)
{
ssl_filter_ctx_t *filter_ctx = f->ctx;
- bio_filter_out_ctx_t *outctx =
- (bio_filter_out_ctx_t *)(filter_ctx->pbioWrite->ptr);
+ bio_filter_out_ctx_t *outctx;
int res;
/* write SSL */
return APR_EGENERAL;
}
+ outctx = (bio_filter_out_ctx_t *)filter_ctx->pbioWrite->ptr;
res = SSL_write(filter_ctx->pssl, (unsigned char *)data, len);
if (res < 0) {
sslconn->ssl = NULL;
filter_ctx->pssl = NULL; /* so filters know we've been shutdown */
+ if (abortive) {
+ /* prevent any further I/O */
+ c->aborted = 1;
+ }
+
return APR_SUCCESS;
}
{
apr_status_t status = APR_SUCCESS;
ssl_filter_ctx_t *filter_ctx = f->ctx;
- bio_filter_in_ctx_t *inctx = (bio_filter_in_ctx_t *)
- (filter_ctx->pbioRead->ptr);
+ bio_filter_in_ctx_t *inctx;
if (f->c->aborted) {
apr_brigade_cleanup(bb);
return ap_pass_brigade(f->next, bb);
}
+ inctx = (bio_filter_in_ctx_t *)filter_ctx->pbioRead->ptr;
/* When we are the writer, we must initialize the inctx
* mode so that we block for any required ssl input, because
* output filtering is always nonblocking.
ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
"Re-negotiation request failed");
+ r->connection->aborted = 1;
return HTTP_FORBIDDEN;
}
"Re-negotiation handshake failed: "
"Not accepted by client!?");
+ r->connection->aborted = 1;
return HTTP_FORBIDDEN;
}
}