detect/multi-tenant: address various thread safety warnings

pull/13519/head
Victor Julien 10 months ago
parent f26f7505db
commit 2bea5af2c8

@ -3155,16 +3155,18 @@ static void DetectEngineThreadCtxDeinitKeywords(DetectEngineCtx *de_ctx, DetectE
static TmEcode DetectEngineThreadCtxInitForMT(ThreadVars *tv, DetectEngineThreadCtx *det_ctx) static TmEcode DetectEngineThreadCtxInitForMT(ThreadVars *tv, DetectEngineThreadCtx *det_ctx)
{ {
DetectEngineMasterCtx *master = &g_master_de_ctx; DetectEngineMasterCtx *master = &g_master_de_ctx;
SCMutexLock(&master->lock);
DetectEngineTenantMapping *map_array = NULL; DetectEngineTenantMapping *map_array = NULL;
uint32_t map_array_size = 0; uint32_t map_array_size = 0;
uint32_t map_cnt = 0; uint32_t map_cnt = 0;
uint32_t max_tenant_id = 0; uint32_t max_tenant_id = 0;
DetectEngineCtx *list = master->list; DetectEngineCtx *list = master->list;
HashTable *mt_det_ctxs_hash = NULL;
if (master->tenant_selector == TENANT_SELECTOR_UNKNOWN) { if (master->tenant_selector == TENANT_SELECTOR_UNKNOWN) {
SCLogError("no tenant selector set: " SCLogError("no tenant selector set: "
"set using multi-detect.selector"); "set using multi-detect.selector");
SCMutexUnlock(&master->lock);
return TM_ECODE_FAILED; return TM_ECODE_FAILED;
} }
@ -3177,7 +3179,8 @@ static TmEcode DetectEngineThreadCtxInitForMT(ThreadVars *tv, DetectEngineThread
tcnt++; tcnt++;
} }
mt_det_ctxs_hash = HashTableInit(tcnt * 2, TenantIdHash, TenantIdCompare, TenantIdFree); HashTable *mt_det_ctxs_hash =
HashTableInit(tcnt * 2, TenantIdHash, TenantIdCompare, TenantIdFree);
if (mt_det_ctxs_hash == NULL) { if (mt_det_ctxs_hash == NULL) {
goto error; goto error;
} }
@ -3257,6 +3260,7 @@ static TmEcode DetectEngineThreadCtxInitForMT(ThreadVars *tv, DetectEngineThread
break; break;
} }
SCMutexUnlock(&master->lock);
return TM_ECODE_OK; return TM_ECODE_OK;
error: error:
if (map_array != NULL) if (map_array != NULL)
@ -3264,6 +3268,7 @@ error:
if (mt_det_ctxs_hash != NULL) if (mt_det_ctxs_hash != NULL)
HashTableFree(mt_det_ctxs_hash); HashTableFree(mt_det_ctxs_hash);
SCMutexUnlock(&master->lock);
return TM_ECODE_FAILED; return TM_ECODE_FAILED;
} }
@ -3870,11 +3875,13 @@ DetectEngineCtx *DetectEngineReference(DetectEngineCtx *de_ctx)
return de_ctx; return de_ctx;
} }
/** TODO locking? Not needed if this is a one time setting at startup */ bool DetectEngineMultiTenantEnabled(void)
int DetectEngineMultiTenantEnabled(void)
{ {
DetectEngineMasterCtx *master = &g_master_de_ctx; DetectEngineMasterCtx *master = &g_master_de_ctx;
return (master->multi_tenant_enabled); SCMutexLock(&master->lock);
bool enabled = master->multi_tenant_enabled;
SCMutexUnlock(&master->lock);
return enabled;
} }
/** \internal /** \internal

@ -108,7 +108,7 @@ void DetectEngineDeReference(DetectEngineCtx **de_ctx);
int DetectEngineReload(const SCInstance *suri); int DetectEngineReload(const SCInstance *suri);
int DetectEngineEnabled(void); int DetectEngineEnabled(void);
int DetectEngineMTApply(void); int DetectEngineMTApply(void);
int DetectEngineMultiTenantEnabled(void); bool DetectEngineMultiTenantEnabled(void);
int DetectEngineMultiTenantSetup(const bool unix_socket); int DetectEngineMultiTenantSetup(const bool unix_socket);
int DetectEngineReloadStart(void); int DetectEngineReloadStart(void);

Loading…
Cancel
Save