Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP4:Update
haproxy.748
0004-BUG-MEDIUM-ssl-fix-bad-ssl-context-init-ca...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0004-BUG-MEDIUM-ssl-fix-bad-ssl-context-init-can-cause-se.patch of Package haproxy.748
From 4949d66f2a473f665b769d68e322e4d36f298080 Mon Sep 17 00:00:00 2001 From: Emeric Brun <ebrun@haproxy.comw> Date: Wed, 12 Nov 2014 17:35:37 +0100 Subject: [PATCH 04/13] BUG/MEDIUM: ssl: fix bad ssl context init can cause segfault in case of OOM. Some SSL context's init functions errors were not handled and can cause a segfault due to an incomplete SSL context initialization. This fix must be backported to 1.5. (cherry picked from commit 5547615cdac377797ae351a2e024376dbf6d6963) --- src/ssl_sock.c | 52 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/src/ssl_sock.c b/src/ssl_sock.c index f8bfbe7..620609f 100644 --- a/src/ssl_sock.c +++ b/src/ssl_sock.c @@ -2040,15 +2040,29 @@ static int ssl_sock_init(struct connection *conn) return -1; } + /* set fd on SSL session context */ + if (!SSL_set_fd(conn->xprt_ctx, conn->t.sock.fd)) { + SSL_free(conn->xprt_ctx); + conn->xprt_ctx = NULL; + conn->err_code = CO_ER_SSL_NO_MEM; + return -1; + } + + /* set connection pointer */ + if (!SSL_set_app_data(conn->xprt_ctx, conn)) { + SSL_free(conn->xprt_ctx); + conn->xprt_ctx = NULL; + conn->err_code = CO_ER_SSL_NO_MEM; + return -1; + } + SSL_set_connect_state(conn->xprt_ctx); - if (objt_server(conn->target)->ssl_ctx.reused_sess) - SSL_set_session(conn->xprt_ctx, objt_server(conn->target)->ssl_ctx.reused_sess); - - /* set fd on SSL session context */ - SSL_set_fd(conn->xprt_ctx, conn->t.sock.fd); - - /* set connection pointer */ - SSL_set_app_data(conn->xprt_ctx, conn); + if (objt_server(conn->target)->ssl_ctx.reused_sess) { + if(!SSL_set_session(conn->xprt_ctx, objt_server(conn->target)->ssl_ctx.reused_sess)) { + SSL_SESSION_free(objt_server(conn->target)->ssl_ctx.reused_sess); + objt_server(conn->target)->ssl_ctx.reused_sess = NULL; + } + } /* leave init state and start handshake */ conn->flags |= CO_FL_SSL_WAIT_HS | CO_FL_WAIT_L6_CONN; @@ -2065,14 +2079,24 @@ static int ssl_sock_init(struct connection *conn) return -1; } + /* set fd on SSL session context */ + if (!SSL_set_fd(conn->xprt_ctx, conn->t.sock.fd)) { + SSL_free(conn->xprt_ctx); + conn->xprt_ctx = NULL; + conn->err_code = CO_ER_SSL_NO_MEM; + return -1; + } + + /* set connection pointer */ + if (!SSL_set_app_data(conn->xprt_ctx, conn)) { + SSL_free(conn->xprt_ctx); + conn->xprt_ctx = NULL; + conn->err_code = CO_ER_SSL_NO_MEM; + return -1; + } + SSL_set_accept_state(conn->xprt_ctx); - /* set fd on SSL session context */ - SSL_set_fd(conn->xprt_ctx, conn->t.sock.fd); - - /* set connection pointer */ - SSL_set_app_data(conn->xprt_ctx, conn); - /* leave init state and start handshake */ conn->flags |= CO_FL_SSL_WAIT_HS | CO_FL_WAIT_L6_CONN; -- 2.1.4
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor