[syslog-ng] Logging with db-parser issue

ILLES, Marton illes.marton at balabit.hu
Thu May 14 20:21:53 CEST 2009


Hi Nate,

Thanks for the core and congratulation for your gdb skills :), though I
could reproduce your problem meanwhile.

In your configuration there is a problem that Bazsi has also spotted:

>> log {
>>         source(s_net);
>>         destination(d_parsed);
>>         parser(p_db);
>> };
>
> the log statements define a 'pipeline', thus your messages will reach
> the db-parser() only after having been written to the d_parsed
> destination.

It is not just a semantic error, but this is the cause of your segfault.
As statements are evaluated one after an other the parser can not queue
the message for the next statement (the pipeline ends unexpectedly as
parser must always have a next pipe) and a null-pointer deref occurs and
syslog-ng dies. It should be detected on configuration parsing time and
should not die any latter.

Changing your configuration would eliminate the segfault and would also
make use of the parser. So you should have something like this:

log {
        source(s_net);
        parser(p_db);
        destination(d_parsed);
};

Hope it solves your problem.

Marton


On Wed, 2009-05-13 at 11:04 -0400, Nate Hausrath wrote:
> > >
> > > 2, You have a segfault. I would need a backtrace or a core file to track
> > > down the problem. To get a core file you can use the --enable-core
> > > option to syslog-ng and gdb after that to get a backtrace.
> > >
> > > Sorry again for the version problem, I will push an update to my git
> > > tree with the new version 2 xml handling.
> > >
> > > best,
> > >
> > > Marton
> > >
> 
> Hi Marton,
> 
> I finally have the backtrace.  If you need to core file as well, let me know.
> 
> Core was generated by `/opt/syslog-ng-src/sbin/syslog-ng --no-caps
> --enable-core'.
> Program terminated with signal 11, Segmentation fault.
> [New process 5429]
> #0  0x08064117 in log_pipe_queue (s=0x0, msg=0x80a53c0,
> path_options=0xbfd749e4) at logpipe.h:121
> 121	  s->queue(s, msg, path_options);
> (gdb) bt full
> #0  0x08064117 in log_pipe_queue (s=0x0, msg=0x80a53c0,
> path_options=0xbfd749e4) at logpipe.h:121
> No locals.
> #1  0x080640c5 in log_process_pipe_queue (s=0x80a0a38, msg=0x80a53c0,
> path_options=0xbfd749e4) at logprocess.c:73
> 	self = (LogProcessPipe *) 0x80a0a38
> #2  0x08054874 in log_pipe_queue (s=0x80a0a38, msg=0x80a53c0,
> path_options=0xbfd749e4) at logpipe.h:121
> No locals.
> #3  0x0805483c in log_pipe_forward_msg (self=0x80a09c0, msg=0x80a53c0,
> path_options=0xbfd749e4) at logpipe.c:72
> No locals.
> #4  0x0806446c in log_multiplexer_queue (s=0x80a09c0, msg=0x80a53c0,
> path_options=0xbfd749e4) at logmpx.c:115
> 	self = (LogMultiplexer *) 0x80a09c0
> 	i = 1
> 	local_options = {flow_control = 0, matched = 0xbfd7498c}
> 	matched = 1
> 	delivered = 1
> 	last_delivery = 0
> 	fallback = 1
> #5  0x08064490 in log_pipe_queue (s=0x80a09c0, msg=0x80a53c0,
> path_options=0xbfd749e4) at logpipe.h:121
> No locals.
> #6  0x080643f8 in log_multiplexer_queue (s=0x80a0990, msg=0x80a53c0,
> path_options=0xbfd74b28) at logmpx.c:105
> 	next_hop = (LogPipe *) 0x80a09c0
> 	self = (LogMultiplexer *) 0x80a0990
> 	i = 0
> 	local_options = {flow_control = 0, matched = 0xbfd749fc}
> 	matched = 1
> 	delivered = 0
> 	last_delivery = 1
> 	fallback = 0
> #7  0x0806b792 in log_pipe_queue (s=0x80a0990, msg=0x80a53c0,
> path_options=0xbfd74b28) at logpipe.h:121
> No locals.
> #8  0x0806b75d in log_source_group_queue (s=0x80a0370, msg=0x80a53c0,
> path_options=0xbfd74b28) at sgroup.c:97
> 	self = (LogSourceGroup *) 0x80a0370
> 	cfg = (GlobalConfig *) 0x809baa0
> #9  0x08054874 in log_pipe_queue (s=0x80a0370, msg=0x80a53c0,
> path_options=0xbfd74b28) at logpipe.h:121
> No locals.
> #10 0x0805483c in log_pipe_forward_msg (self=0x80a01f0, msg=0x80a53c0,
> path_options=0xbfd74b28) at logpipe.c:72
> No locals.
> #11 0x08054874 in log_pipe_queue (s=0x80a01f0, msg=0x80a53c0,
> path_options=0xbfd74b28) at logpipe.h:121
> No locals.
> #12 0x0805483c in log_pipe_forward_msg (self=0x80a3100, msg=0x80a53c0,
> path_options=0xbfd74b28) at logpipe.c:72
> No locals.
> #13 0x0807a833 in log_pipe_queue (s=0x80a3100, msg=0x80a53c0,
> path_options=0xbfd74b28) at logpipe.h:121
> No locals.
> #14 0x0807a7b5 in log_source_queue (s=0x80a51d0, msg=0x80a53c0,
> path_options=0xbfd74b98) at logsource.c:167
> 	self = (LogSource *) 0x80a51d0
> 	local_options = {flow_control = -1, matched = 0x0}
> 	processed_counter = (guint32 *) 0x0
> 	stamp = (guint32 *) 0x0
> 	new = 13
> 	handle = (StatsCounter *) 0x0
> 	__PRETTY_FUNCTION__ = "log_source_queue"
> #15 0x0806c577 in log_pipe_queue (s=0x80a51d0, msg=0x80a53c0,
> path_options=0xbfd74b98) at logpipe.h:121
> No locals.
> #16 0x0806c544 in log_reader_handle_line (self=0x80a51d0,
>     line=0x80a31c8 "Apr 12 06:02:39 12log01 syslog-ng[7991]: syslog-ng
> starting up; version='2.0.5'\n\n", length=81,
>     saddr=0x80a55e0, parse_flags=0) at logreader.c:267
> 	m = (LogMessage *) 0x80a53c0
> 	path_options = {flow_control = -1, matched = 0x0}
> #17 0x0806c79d in log_reader_fetch_log (self=0x80a51d0,
> proto=0x80a3168) at logreader.c:346
> 	msg = (
>     const guchar *) 0x80a31c8 "Apr 12 06:02:39 12log01
> syslog-ng[7991]: syslog-ng starting up; version='2.0.5'\n\n"
> 	msg_len = 81
> 	status = LPS_SUCCESS
> 	sa = (GSockAddr *) 0x80a55e0
> 	msg_count = 1
> 	may_read = 1
> 	parse_flags = 0
> 	__PRETTY_FUNCTION__ = "log_reader_fetch_log"
> #18 0x0806c383 in log_reader_fd_dispatch (source=0x80a5248,
> callback=0, user_data=0x0) at logreader.c:207
> 	self = (LogReaderWatch *) 0x80a5248
> #19 0xb7e75cf6 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
> No symbol table info available.
> #20 0xb7e790b3 in ?? () from /usr/lib/libglib-2.0.so.0
> No symbol table info available.
> #21 0xb7e7966e in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
> No symbol table info available.
> #22 0x0804dff6 in main_loop_run (cfg=0xbfd74db0) at main.c:149
> 	iters = 3
> 	stats_timer_id = 5
> #23 0x0804e64d in main (argc=1, argv=0xbfd74e54) at main.c:394
> 	cfg = (GlobalConfig *) 0x809baa0
> 	rc = 0
> 	ctx = (GOptionContext *) 0x808ecc8
> 	error = (GError *) 0x0
> 
> Thanks,
> Nate
> ______________________________________________________________________________
> Member info: https://lists.balabit.hu/mailman/listinfo/syslog-ng
> Documentation: http://www.balabit.com/support/documentation/?product=syslog-ng
> FAQ: http://www.campin.net/syslog-ng/faq.html
> 
> 
-- 
Key fingerprint = F78C 25CA 5F88 6FAF EA21 779D 3279 9F9E 1155 670D




More information about the syslog-ng mailing list