laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-remsim/+/28028 )
Change subject: server: Fix various error paths if startup fails ......................................................................
server: Fix various error paths if startup fails
Don't segfault or use heap after free if osmo-remsim-server cannot fully initialize, e.g. due to ports already in use.
Change-Id: I558e6a0ea089a779f916aa5576341d1c55da1271 --- M src/server/remsim_server.c M src/server/rest_api.c M src/server/rspro_server.c 3 files changed, 7 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-remsim refs/changes/28/28028/1
diff --git a/src/server/remsim_server.c b/src/server/remsim_server.c index a2c1a8c..9c46aa1 100644 --- a/src/server/remsim_server.c +++ b/src/server/remsim_server.c @@ -139,7 +139,6 @@ close(g_event_ofd.fd); out_rps: talloc_free(g_rps->slotmaps); - talloc_free(g_rps); out_rspro: rspro_server_destroy(g_rps);
diff --git a/src/server/rest_api.c b/src/server/rest_api.c index 540fbd4..d3279c4 100644 --- a/src/server/rest_api.c +++ b/src/server/rest_api.c @@ -512,6 +512,7 @@
if (ulfius_start_framework(&g_instance) != U_OK) { LOGP(DREST, LOGL_FATAL, "Cannot start REST API on port %u\n", port); + ulfius_clean_instance(&g_instance); return -1; } return 0; diff --git a/src/server/rspro_server.c b/src/server/rspro_server.c index b753993..4ff4714 100644 --- a/src/server/rspro_server.c +++ b/src/server/rspro_server.c @@ -854,6 +854,11 @@ pthread_rwlock_unlock(&srv->rwlock);
srv->link = ipa_server_link_create(ctx, NULL, host, port, accept_cb, srv); + if (!srv->link) { + talloc_free(srv); + return NULL; + } + ipa_server_link_open(srv->link);
return srv; @@ -865,5 +870,6 @@
ipa_server_link_destroy(srv->link); srv->link = NULL; + pthread_rwlock_destroy(&srv->rwlock); talloc_free(srv); }