Skip to content

Commit 07d94e4

Browse files
committed
BUILD: ssl_sock: remove build warnings on potential null-derefs
When building with -Wnull-dereferences, gcc sees some cases where a pointer is dereferenced after a check may set it to null. While all of these are already guarded by either a preliminary test or the code's construction (eg: listeners code being called only on listeners), it cannot be blamed for not "seeing" this, so better use the unguarded calls everywhere this happens, particularly after checks. This is a step towards building with -Wextra.
1 parent 4ae4923 commit 07d94e4

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

src/ssl_sock.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -830,7 +830,7 @@ static int ssl_tlsext_ticket_key_cb(SSL *s, unsigned char key_name[16], unsigned
830830
int ret = -1; /* error by default */
831831

832832
conn = SSL_get_ex_data(s, ssl_app_data_index);
833-
ref = objt_listener(conn->target)->bind_conf->keys_ref;
833+
ref = __objt_listener(conn->target)->bind_conf->keys_ref;
834834
HA_RWLOCK_RDLOCK(TLSKEYS_REF_LOCK, &ref->lock);
835835

836836
keys = ref->tlskeys;
@@ -1452,7 +1452,7 @@ int ssl_sock_bind_verifycbk(int ok, X509_STORE_CTX *x_store)
14521452
conn->xprt_st |= SSL_SOCK_CAEDEPTH_TO_ST(depth);
14531453
}
14541454

1455-
if (objt_listener(conn->target)->bind_conf->ca_ignerr & (1ULL << err)) {
1455+
if (__objt_listener(conn->target)->bind_conf->ca_ignerr & (1ULL << err)) {
14561456
ssl_sock_dump_errors(conn);
14571457
ERR_clear_error();
14581458
return 1;
@@ -1466,7 +1466,7 @@ int ssl_sock_bind_verifycbk(int ok, X509_STORE_CTX *x_store)
14661466
conn->xprt_st |= SSL_SOCK_CRTERROR_TO_ST(err);
14671467

14681468
/* check if certificate error needs to be ignored */
1469-
if (objt_listener(conn->target)->bind_conf->crt_ignerr & (1ULL << err)) {
1469+
if (__objt_listener(conn->target)->bind_conf->crt_ignerr & (1ULL << err)) {
14701470
ssl_sock_dump_errors(conn);
14711471
ERR_clear_error();
14721472
return 1;
@@ -1807,7 +1807,7 @@ ssl_sock_do_create_cert(const char *servername, struct bind_conf *bind_conf, SSL
18071807
SSL_CTX *
18081808
ssl_sock_create_cert(struct connection *conn, const char *servername, unsigned int key)
18091809
{
1810-
struct bind_conf *bind_conf = objt_listener(conn->target)->bind_conf;
1810+
struct bind_conf *bind_conf = __objt_listener(conn->target)->bind_conf;
18111811

18121812
return ssl_sock_do_create_cert(servername, bind_conf, conn->xprt_ctx);
18131813
}
@@ -3893,7 +3893,7 @@ static int ssl_sess_new_srv_cb(SSL *ssl, SSL_SESSION *sess)
38933893
struct connection *conn = SSL_get_ex_data(ssl, ssl_app_data_index);
38943894
struct server *s;
38953895

3896-
s = objt_server(conn->target);
3896+
s = __objt_server(conn->target);
38973897

38983898
if (!(s->ssl_ctx.options & SRV_SSL_O_NO_REUSE)) {
38993899
int len;
@@ -4398,7 +4398,7 @@ static int ssl_sock_srv_verifycbk(int ok, X509_STORE_CTX *ctx)
43984398
servername = SSL_get_servername(conn->xprt_ctx, TLSEXT_NAMETYPE_host_name);
43994399
sni = servername;
44004400
if (!servername) {
4401-
servername = objt_server(conn->target)->ssl_ctx.verify_host;
4401+
servername = __objt_server(conn->target)->ssl_ctx.verify_host;
44024402
if (!servername)
44034403
return ok;
44044404
}
@@ -4939,7 +4939,7 @@ static int ssl_sock_init(struct connection *conn)
49394939

49404940
retry_connect:
49414941
/* Alloc a new SSL session ctx */
4942-
conn->xprt_ctx = SSL_new(objt_server(conn->target)->ssl_ctx.ctx);
4942+
conn->xprt_ctx = SSL_new(__objt_server(conn->target)->ssl_ctx.ctx);
49434943
if (!conn->xprt_ctx) {
49444944
if (may_retry--) {
49454945
pool_gc(NULL);
@@ -4974,13 +4974,13 @@ static int ssl_sock_init(struct connection *conn)
49744974
}
49754975

49764976
SSL_set_connect_state(conn->xprt_ctx);
4977-
if (objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr) {
4978-
const unsigned char *ptr = objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr;
4979-
SSL_SESSION *sess = d2i_SSL_SESSION(NULL, &ptr, objt_server(conn->target)->ssl_ctx.reused_sess[tid].size);
4980-
if(sess && !SSL_set_session(conn->xprt_ctx, sess)) {
4977+
if (__objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr) {
4978+
const unsigned char *ptr = __objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr;
4979+
SSL_SESSION *sess = d2i_SSL_SESSION(NULL, &ptr, __objt_server(conn->target)->ssl_ctx.reused_sess[tid].size);
4980+
if (sess && !SSL_set_session(conn->xprt_ctx, sess)) {
49814981
SSL_SESSION_free(sess);
4982-
free(objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr);
4983-
objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr = NULL;
4982+
free(__objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr);
4983+
__objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr = NULL;
49844984
} else if (sess) {
49854985
SSL_SESSION_free(sess);
49864986
}
@@ -4998,7 +4998,7 @@ static int ssl_sock_init(struct connection *conn)
49984998

49994999
retry_accept:
50005000
/* Alloc a new SSL session ctx */
5001-
conn->xprt_ctx = SSL_new(objt_listener(conn->target)->bind_conf->initial_ctx);
5001+
conn->xprt_ctx = SSL_new(__objt_listener(conn->target)->bind_conf->initial_ctx);
50025002
if (!conn->xprt_ctx) {
50035003
if (may_retry--) {
50045004
pool_gc(NULL);
@@ -5321,9 +5321,9 @@ int ssl_sock_handshake(struct connection *conn, unsigned int flag)
53215321
ERR_clear_error();
53225322

53235323
/* free resumed session if exists */
5324-
if (objt_server(conn->target) && objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr) {
5325-
free(objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr);
5326-
objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr = NULL;
5324+
if (objt_server(conn->target) && __objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr) {
5325+
free(__objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr);
5326+
__objt_server(conn->target)->ssl_ctx.reused_sess[tid].ptr = NULL;
53275327
}
53285328

53295329
/* Fail on all other handshake errors */

0 commit comments

Comments
 (0)