[syslog-ng][aaron@schrab.com: Bug#78445: syslog-ng: The included libol uses va_list incorrectly.]

Balazs Scheidler bazsi@balabit.hu
Wed, 26 Sep 2001 17:11:03 +0200


----- Forwarded message from Aaron Schrab <aaron@schrab.com> -----

From: Aaron Schrab <aaron@schrab.com>
To: 78445@bugs.debian.org
Cc: control@bugs.debian.org
Reply-To: Aaron Schrab <aaron@schrab.com>, 78445@bugs.debian.org
Subject: Bug#78445: syslog-ng: The included libol uses va_list incorrectly.
Date: Sat, 22 Sep 2001 10:47:33 -0500

tags 78445 patch
thanks

The msg_vformat function from libol passes the same va_list to two
different functions, expecting that the first won't affect the second.
This assumption isn't true on powerpc, so when the second function gets
it, there aren't any arguments left to read.

The included patch fixes this by making a copy of the va_list before
passing it for the first time.

I checked for other occurences of this problem, but this seems to be the
only one.  My patched copy has been handling my logging for a few hours
now and it seems to work fine.  The unpatched one died immediately.


*** /tmp/syslog-ng.diff
diff -Pur syslog-ng-1.5.9/debian/libol.patch syslog-ng-1.5.9.ats/debian/libol.patch
--- syslog-ng-1.5.9/debian/libol.patch	Wed Dec 31 18:00:00 1969
+++ syslog-ng-1.5.9.ats/debian/libol.patch	Sat Sep 22 06:06:43 2001
@@ -0,0 +1,37 @@
+diff -ur libol-0.2.24.orig/src/format.h libol-0.2.24/src/format.h
+--- libol-0.2.24.orig/src/format.h	Sat Jul 10 08:23:09 1999
++++ libol-0.2.24/src/format.h	Sat Sep 22 05:56:59 2001
+@@ -28,6 +28,12 @@
+ 
+ #include <stdarg.h>
+ 
++#ifndef va_copy
++# ifdef __va_copy
++#  define va_copy __va_copy
++# endif
++#endif
++
+ struct ol_string *c_format(const char *format, ...);
+ UINT32 c_format_length(const char *format, ...);
+ UINT32 c_format_write(const char *format, UINT32 length, UINT8 *buffer, ...);
+diff -ur -x configure libol-0.2.24.orig/src/werror.c libol-0.2.24/src/werror.c
+--- libol-0.2.24.orig/src/werror.c	Fri Feb  4 13:02:04 2000
++++ libol-0.2.24/src/werror.c	Sat Sep 22 05:58:41 2001
+@@ -117,9 +117,16 @@
+ {
+ 	UINT8 errorbuf[BUF_SIZE];
+ 	int length;
+-	
++#ifdef va_copy
++	va_list args_copy;
++	va_copy (args_copy, args);
++#endif
++
+ 	length = c_vformat_length(f, args);
+ 	if (length <= BUF_SIZE) {
++#ifdef va_copy
++		va_copy (args, args_copy);
++#endif
+ 		c_vformat_write(f, sizeof(errorbuf), errorbuf, args);
+ 		MSG_WRITE(level, length, errorbuf);
+ 	}
diff -Pur syslog-ng-1.5.9/debian/rules syslog-ng-1.5.9.ats/debian/rules
--- syslog-ng-1.5.9/debian/rules	Sat Sep 22 06:08:56 2001
+++ syslog-ng-1.5.9.ats/debian/rules	Sat Sep 22 06:09:13 2001
@@ -17,7 +17,7 @@
 	rm $(LIBOLDIR)/ltmain.sh $(LIBOLDIR)/config.sub $(LIBOLDIR)/config.guess \
 	   $(LIBOLDIR)/aclocal.m4 $(LIBOLDIR)/missing \
 	   $(LIBOLDIR)/ltconfig $(LIBOLDIR)/mkinstalldirs
-	(cd $(LIBOLDIR); ./autogen.sh; ./configure --prefix=/usr/lib; $(MAKE) )
+	(cd $(LIBOLDIR); patch -p1 < ../debian/libol.patch; ./autogen.sh; ./configure --prefix=/usr/lib; $(MAKE) )
 	echo "libol: Done"
 #	mv -f ltmain.sh ltmain.sh.save
 #	mv -f config.sub config.sub.save


-- System Information
Debian Release: testing/unstable
Architecture: powerpc
Kernel: Linux frell 2.4.10-pre10-ben0 #1 Thu Sep 20 00:45:23 CDT 2001 ppc
Locale: LANG=C, LC_CTYPE=en_US

Versions of packages syslog-ng depends on:
ii  libc6                         2.2.4-1    GNU C Library: Shared libraries an


----- End forwarded message -----

-- 
Bazsi
PGP info: KeyID 9AF8D0A9 Fingerprint CD27 CFB0 802C 0944 9CFD 804E C82C 8EB1