check integrity of plugins before loading

This commit is contained in:
Martin Willi
2009-06-22 15:47:17 +02:00
parent 20d4fc97cf
commit 960e0c1040
3 changed files with 33 additions and 0 deletions
+15
View File
@@ -20,8 +20,10 @@
#include <dlfcn.h>
#include <limits.h>
#include <stdio.h>
#include <link.h>
#include <debug.h>
#include <integrity_checker.h>
#include <utils/linked_list.h>
#include <plugins/plugin.h>
@@ -61,6 +63,12 @@ static plugin_t* load_plugin(private_plugin_loader_t *this,
snprintf(file, sizeof(file), "%s/libstrongswan-%s.so", path, name);
if (lib->integrity &&
!lib->integrity->check_file(lib->integrity, name, file))
{
DBG1("file integrity test of plugin '%s' failed", name);
return NULL;
}
handle = dlopen(file, RTLD_LAZY);
if (handle == NULL)
{
@@ -74,6 +82,13 @@ static plugin_t* load_plugin(private_plugin_loader_t *this,
dlclose(handle);
return NULL;
}
if (lib->integrity &&
!lib->integrity->check_segment(lib->integrity, name, constructor))
{
DBG1("segment integrity test of plugin '%s' failed", name);
dlclose(handle);
return NULL;
}
plugin = constructor();
if (plugin == NULL)
{