Ver Fonte

Merge pull request #126 from kamailio/coudot/tls_shm_available_bug

fix race condition in tls module when checking available memory limits
Daniel-Constantin Mierla há 10 anos atrás
pai
commit
6b078c89fa
3 ficheiros alterados com 15 adições e 2 exclusões
  1. 8 0
      mem/shm_mem.c
  2. 5 0
      mem/shm_mem.h
  3. 2 2
      modules/tls/tls_server.c

+ 8 - 0
mem/shm_mem.c

@@ -254,5 +254,13 @@ void shm_mem_destroy(void)
 #endif
 }
 
+inline unsigned long safe_shm_available()
+{
+	unsigned long ret;
+	shm_lock();
+	ret = shm_available();
+	shm_unlock();
+	return ret;
+}
 
 #endif

+ 5 - 0
mem/shm_mem.h

@@ -312,6 +312,11 @@ do{\
 
 #endif /* ! SHM_SAFE_MALLOC */
 
+/* multi-process safe version of shm_available()
+ */
+inline unsigned long safe_shm_available();
+
+
 #endif /* shm_mem_h */
 
 #endif /* SHM_MEM */

+ 2 - 2
modules/tls/tls_server.c

@@ -59,10 +59,10 @@ int tls_run_event_routes(struct tcp_connection *c);
 /* low memory treshold for openssl bug #1491 workaround */
 #define LOW_MEM_NEW_CONNECTION_TEST() \
 	(cfg_get(tls, tls_cfg, low_mem_threshold1) && \
-	  (shm_available() < cfg_get(tls, tls_cfg, low_mem_threshold1)))
+	  (safe_shm_available() < cfg_get(tls, tls_cfg, low_mem_threshold1)))
 #define LOW_MEM_CONNECTED_TEST() \
 	(cfg_get(tls, tls_cfg, low_mem_threshold2) && \
-	  (shm_available() <  cfg_get(tls, tls_cfg, low_mem_threshold2)))
+	  (safe_shm_available() <  cfg_get(tls, tls_cfg, low_mem_threshold2)))
 
 #define TLS_RD_MBUF_SZ	65536
 #define TLS_WR_MBUF_SZ	65536