[Forensics-changes] [yara] 93/160: Mutex lock on is_loaded bitmask

Hilko Bengen bengen at moszumanska.debian.org
Sat Jul 1 10:29:22 UTC 2017


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to annotated tag v3.4.0
in repository yara.

commit 85116f2809101e86d5999db7b4060a0e94ff8a33
Author: Shane Huntley <shuntley at google.com>
Date:   Tue Apr 28 11:37:37 2015 -0700

    Mutex lock on is_loaded bitmask
---
 libyara/modules.c | 37 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/libyara/modules.c b/libyara/modules.c
index 220cac5..ab0936d 100644
--- a/libyara/modules.c
+++ b/libyara/modules.c
@@ -55,11 +55,37 @@ YR_MODULE yr_modules_table[] =
 
 #undef MODULE
 
+mutex_t yr_modules_mutex;
+
+void _yr_modules_lock()
+{
+  #ifdef _WIN32
+  WaitForSingleObject(yr_modules_mutex, INFINITE);
+  #else
+  pthread_mutex_lock(&yr_modules_mutex);
+  #endif
+}
+
+void _yr_modules_unlock()
+{
+  #ifdef _WIN32
+  ReleaseMutex(yr_modules_mutex);
+  #else
+  pthread_mutex_unlock(&yr_modules_mutex);
+  #endif
+}
+
 
 int yr_modules_initialize()
 {
   int i, result;
 
+  #if _WIN32
+  yr_modules_mutex = CreateMutex(NULL, FALSE, NULL);
+  #else
+  pthread_mutex_init(&yr_modules_mutex, NULL);
+  #endif
+
   for (i = 0; i < sizeof(yr_modules_table) / sizeof(YR_MODULE); i++)
   {
     result = yr_modules_table[i].initialize(&yr_modules_table[i]);
@@ -76,6 +102,12 @@ int yr_modules_finalize()
 {
   int i, result;
 
+  #if _WIN32
+  CloseHandle(yr_modules_mutex);
+  #else
+  pthread_mutex_destroy(&yr_modules_mutex);
+  #endif
+
   for (i = 0; i < sizeof(yr_modules_table) / sizeof(YR_MODULE); i++)
   {
     result = yr_modules_table[i].finalize(&yr_modules_table[i]);
@@ -169,8 +201,9 @@ int yr_modules_load(
 
       if (result != ERROR_SUCCESS)
         return result;
-
+      _yr_modules_lock();
       yr_modules_table[i].is_loaded |= 1 << yr_get_tidx();
+      _yr_modules_unlock();
     }
   }
 
@@ -197,7 +230,9 @@ int yr_modules_unload_all(
       assert(module_structure != NULL);
 
       yr_modules_table[i].unload(module_structure);
+      _yr_modules_lock();
       yr_modules_table[i].is_loaded &= ~tidx_mask;
+      _yr_modules_unlock();
     }
   }
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/forensics/yara.git



More information about the forensics-changes mailing list