lib/event: do not clobber g_spdk_app on failed init

This fixes a double free in spdk_app_fini().
If spdk_app_start() failed, the g_spdk_app.config
was becoming a dangling pointer which would be
accessed and freed by spdk_app_fini()

Change-Id: Ifa833f5706d391356df39db4e1c538db7a1c7dcb
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/404358
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Dariusz Stojaczyk 2018-03-19 17:14:15 +01:00 committed by Jim Harris
parent 9a43cbd490
commit f70f4b8568

View File

@ -334,15 +334,10 @@ spdk_app_start(struct spdk_app_opts *opts, spdk_event_fn start_fn,
}
}
memset(&g_spdk_app, 0, sizeof(g_spdk_app));
g_spdk_app.config = config;
g_spdk_app.shm_id = opts->shm_id;
g_spdk_app.shutdown_cb = opts->shutdown_cb;
spdk_log_set_level(SPDK_APP_DEFAULT_LOG_PRIORITY);
spdk_log_open();
sp = spdk_conf_find_section(g_spdk_app.config, "Global");
sp = spdk_conf_find_section(config, "Global");
if (opts->reactor_mask == NULL) {
if (sp && spdk_conf_section_get_val(sp, "ReactorMask")) {
opts->reactor_mask = spdk_conf_section_get_val(sp, "ReactorMask");
@ -400,7 +395,7 @@ spdk_app_start(struct spdk_app_opts *opts, spdk_event_fn start_fn,
}
if (opts->tpoint_group_mask == NULL) {
sp = spdk_conf_find_section(g_spdk_app.config, "Global");
sp = spdk_conf_find_section(config, "Global");
if (sp != NULL) {
opts->tpoint_group_mask = spdk_conf_section_get_val(sp, "TpointGroupMask");
}
@ -425,6 +420,10 @@ spdk_app_start(struct spdk_app_opts *opts, spdk_event_fn start_fn,
goto app_start_trace_cleanup_err;
}
memset(&g_spdk_app, 0, sizeof(g_spdk_app));
g_spdk_app.config = config;
g_spdk_app.shm_id = opts->shm_id;
g_spdk_app.shutdown_cb = opts->shutdown_cb;
g_spdk_app.rc = 0;
g_init_lcore = spdk_env_get_current_core();
g_app_start_fn = start_fn;