Package: rrdtool
Version: 1.4.2-1+b1
Severity: serious
Justification: breaks iptotal

Hi,

iptotal.cgi (from the iptotal package) contains the following line
<RRD::TIME::LAST /var/lib/iptotal/iptotal.rrd %c>
which causes rrdcgi to crash with the following backtrace:

(gdb) bt
#0  strlen () at ../sysdeps/i386/i486/strlen.S:40
#1  0xb73a681e in _IO_vfprintf_internal (s=0xbfa4086c,
    format=0xb781edd0 "Usage: rrdtool %s [--daemon <addr>] <file>",
ap=0xbfa40988 "\021\001\202ˇ")
    at vfprintf.c:1601
#2  0xb73c56b4 in _IO_vsnprintf (string=0xb78269c0 "Usage: rrdtool ",
maxlen=4096,
    format=0xb781edd0 "Usage: rrdtool %s [--daemon <addr>] <file>",
args=0xbfa40984 "\211")
    at vsnprintf.c:120
#3  0xb78140c4 in rrd_set_error () from /usr/lib/librrd.so.4
#4  0xb7805be4 in rrd_last () from /usr/lib/librrd.so.4
#5  0x0804b211 in printtimelast ()
#6  0x0804aa83 in ?? ()
#7  0x0804c265 in ?? ()
#8  0xb737bb55 in __libc_start_main (main=0x804bf70, argc=2,
ubp_av=0xbfa40bb4, init=0x804c5c0,
    fini=0x804c5b0, rtld_fini=0xb78629b0 <_dl_fini>,
stack_end=0xbfa40bac) at libc-start.c:222


Afer some investigation, I found that the problem is in the line 991 
of rrd_cgi.c:

  last = rrd_last(argc + 1, (char **) args - 1);

The first argument of rrd_last() should obviously be argc (which is 2),
not argc + 1.  Also please note that second argument of the function
refers to address before the start of the array, which seems to 
be a very bad programming style, and which in fact is a root cause of the 
crash as rrd_last() tries to display argv[0] in an error message.

The attached patch fixes the problem.

Regards,
robert




-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (990, 'unstable'), (200, 'testing')
Architecture: i386 (i686)

Kernel: Linux 2.6.32
Locale: LANG=pl_PL, LC_CTYPE=pl_PL (charmap=ISO-8859-2)
Shell: /bin/sh linked to /bin/pdksh

Versions of packages rrdtool depends on:
ii  libc6                    2.10.2-6        Embedded GNU C Library: Shared lib
ii  libcairo2                1.8.10-2        The Cairo 2D vector graphics libra
ii  libdbi0                  0.8.2-3         Database Independent Abstraction L
ii  libglib2.0-0             2.22.4-1        The GLib library of C routines
ii  libpango1.0-0            1.26.2-1        Layout and rendering of internatio
ii  libpng12-0               1.2.43-1        PNG library - runtime
ii  librrd4                  1.4.2-1+b1      time-series data storage and displ
ii  libxml2                  2.7.6.dfsg-2+b1 GNOME XML library

rrdtool recommends no packages.

Versions of packages rrdtool suggests:
pn  librrds-perl                  <none>     (no description available)

-- no debconf information

-- debsums errors found:
debsums: changed file /usr/bin/rrdcgi (from rrdtool package)
--- rrdtool-1.4.2.old/src/rrd_cgi.c	2009-11-15 12:54:23.000000000 +0100
+++ rrdtool-1.4.2/src/rrd_cgi.c	2010-03-11 13:31:16.000000000 +0100
@@ -987,8 +987,9 @@
         buf = malloc(255);
         if (buf == NULL) {
             return stralloc("[ERROR: allocating strftime buffer]");
-        };
-        last = rrd_last(argc + 1, (char **) args - 1);
+        }
+        const char *newargs[] = { "rrdcgi", args[0], NULL };
+        last = rrd_last(2, (char **) (newargs));
         if (rrd_test_error()) {
             char     *err =
                 malloc((strlen(rrd_get_error()) +

Reply via email to