Make sure the certificate cache is flushed when plugins are unloaded.
This avoids segmentation faults when plugins implementing cert_t are already unloaded when the cache is flushed during destruction.
This commit is contained in:
@@ -115,6 +115,8 @@ static void destroy(private_daemon_t *this)
|
|||||||
DESTROY_IF(this->public.connect_manager);
|
DESTROY_IF(this->public.connect_manager);
|
||||||
DESTROY_IF(this->public.mediation_manager);
|
DESTROY_IF(this->public.mediation_manager);
|
||||||
#endif /* ME */
|
#endif /* ME */
|
||||||
|
/* make sure the cache is clear before unloading plugins */
|
||||||
|
lib->credmgr->flush_cache(lib->credmgr, CERT_ANY);
|
||||||
/* unload plugins to release threads */
|
/* unload plugins to release threads */
|
||||||
lib->plugins->unload(lib->plugins);
|
lib->plugins->unload(lib->plugins);
|
||||||
#ifdef CAPABILITIES_LIBCAP
|
#ifdef CAPABILITIES_LIBCAP
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ void library_deinit()
|
|||||||
detailed = lib->settings->get_bool(lib->settings,
|
detailed = lib->settings->get_bool(lib->settings,
|
||||||
"libstrongswan.leak_detective.detailed", TRUE);
|
"libstrongswan.leak_detective.detailed", TRUE);
|
||||||
|
|
||||||
|
/* make sure the cache is clear before unloading plugins */
|
||||||
|
lib->credmgr->flush_cache(lib->credmgr, CERT_ANY);
|
||||||
|
|
||||||
this->public.scheduler->destroy(this->public.scheduler);
|
this->public.scheduler->destroy(this->public.scheduler);
|
||||||
this->public.processor->destroy(this->public.processor);
|
this->public.processor->destroy(this->public.processor);
|
||||||
this->public.plugins->destroy(this->public.plugins);
|
this->public.plugins->destroy(this->public.plugins);
|
||||||
|
|||||||
@@ -852,6 +852,7 @@ void exit_pluto(int status)
|
|||||||
delete_lock();
|
delete_lock();
|
||||||
options->destroy(options);
|
options->destroy(options);
|
||||||
pluto_deinit();
|
pluto_deinit();
|
||||||
|
lib->credmgr->flush_cache(lib->credmgr, CERT_ANY);
|
||||||
lib->plugins->unload(lib->plugins);
|
lib->plugins->unload(lib->plugins);
|
||||||
libhydra_deinit();
|
libhydra_deinit();
|
||||||
library_deinit();
|
library_deinit();
|
||||||
|
|||||||
Reference in New Issue
Block a user