output/log: Improve error handling

This commit improves error handling for cases when file(s) cannot be
opened.
- Return NULL if file object can't be opened
- checks whether the file object has been opened before
  dereferencing the per-file context.

Issue: 7447
pull/12339/head
Jeff Lucovsky 9 months ago committed by Victor Julien
parent 6f937c7545
commit e72fc39f83

@ -346,14 +346,17 @@ static void ThreadLogFileHashFreeFunc(void *data)
BUG_ON(data == NULL); BUG_ON(data == NULL);
ThreadLogFileHashEntry *thread_ent = (ThreadLogFileHashEntry *)data; ThreadLogFileHashEntry *thread_ent = (ThreadLogFileHashEntry *)data;
if (thread_ent) { if (!thread_ent)
return;
if (thread_ent->isopen) {
LogFileCtx *lf_ctx = thread_ent->ctx; LogFileCtx *lf_ctx = thread_ent->ctx;
/* Free the leaf log file entries */ /* Free the leaf log file entries */
if (!lf_ctx->threaded) { if (!lf_ctx->threaded) {
LogFileFreeCtx(lf_ctx); LogFileFreeCtx(lf_ctx);
} }
SCFree(thread_ent);
} }
SCFree(thread_ent);
} }
bool SCLogOpenThreadedFile(const char *log_path, const char *append, LogFileCtx *parent_ctx) bool SCLogOpenThreadedFile(const char *log_path, const char *append, LogFileCtx *parent_ctx)
@ -712,6 +715,7 @@ LogFileCtx *LogFileEnsureExists(ThreadId thread_id, LogFileCtx *parent_ctx)
if (!parent_ctx->threaded) if (!parent_ctx->threaded)
return parent_ctx; return parent_ctx;
LogFileCtx *ret_ctx = NULL;
SCMutexLock(&parent_ctx->threads->mutex); SCMutexLock(&parent_ctx->threads->mutex);
/* Find this thread's entry */ /* Find this thread's entry */
ThreadLogFileHashEntry *entry = LogFileThread2Slot(parent_ctx->threads, thread_id); ThreadLogFileHashEntry *entry = LogFileThread2Slot(parent_ctx->threads, thread_id);
@ -721,12 +725,13 @@ LogFileCtx *LogFileEnsureExists(ThreadId thread_id, LogFileCtx *parent_ctx)
bool new = entry->isopen; bool new = entry->isopen;
/* has it been opened yet? */ /* has it been opened yet? */
if (!entry->isopen) { if (!new) {
SCLogDebug("%s: Opening new file for thread/id %d to file %s [ctx %p]", t_thread_name, SCLogDebug("%s: Opening new file for thread/id %d to file %s [ctx %p]", t_thread_name,
thread_id, parent_ctx->filename, parent_ctx); thread_id, parent_ctx->filename, parent_ctx);
if (LogFileNewThreadedCtx( if (LogFileNewThreadedCtx(
parent_ctx, parent_ctx->filename, parent_ctx->threads->append, entry)) { parent_ctx, parent_ctx->filename, parent_ctx->threads->append, entry)) {
entry->isopen = true; entry->isopen = true;
ret_ctx = entry->ctx;
} else { } else {
SCLogError( SCLogError(
"Unable to open slot %d for file %s", entry->slot_number, parent_ctx->filename); "Unable to open slot %d for file %s", entry->slot_number, parent_ctx->filename);
@ -742,7 +747,7 @@ LogFileCtx *LogFileEnsureExists(ThreadId thread_id, LogFileCtx *parent_ctx)
} }
} }
return entry->ctx; return ret_ctx;
} }
/** \brief LogFileThreadedName() Create file name for threaded EVE storage /** \brief LogFileThreadedName() Create file name for threaded EVE storage

Loading…
Cancel
Save