Sfoglia il codice sorgente

log: Handle race in printf_to_logs and format_set

When logsys_format_set is called, it can set format to NULL and if
logsys thread is actually reading it, corosync can segfault (NULL
pointer access).

Solution is to lock format in log_printf_to_logs function.

Signed-off-by: jason <huzhijiang@gmail.com>
Reviewed-by: Jan Friesse <jfriesse@redhat.com>
jason 13 anni fa
parent
commit
a282eeecb4
1 ha cambiato i file con 4 aggiunte e 0 eliminazioni
  1. 4 0
      exec/logsys.c

+ 4 - 0
exec/logsys.c

@@ -443,6 +443,8 @@ static void log_printf_to_logs (
 	subsysid = LOGSYS_DECODE_SUBSYSID(rec_ident);
 	level = LOGSYS_DECODE_LEVEL(rec_ident);
 
+	pthread_mutex_lock (&logsys_config_mutex);
+
 	if (!((LOGSYS_DECODE_RECID(rec_ident) == LOGSYS_RECID_LOG) ||
 	      (logsys_loggers[subsysid].trace1_allowed && LOGSYS_DECODE_RECID(rec_ident) == LOGSYS_RECID_TRACE1))) {
 		return;
@@ -539,6 +541,8 @@ static void log_printf_to_logs (
 		}
 	}
 
+	pthread_mutex_unlock (&logsys_config_mutex);
+
 	normal_output_buffer[normal_output_buffer_idx] = '\0';
 	syslog_output_buffer[syslog_output_buffer_idx] = '\0';