Your message dated Tue, 12 Dec 2006 15:47:03 +0000
with message-id <[EMAIL PROTECTED]>
and subject line Bug#402719: fixed in procmeter3 3.4e-2
has caused the attached Bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--- Begin Message ---
Package: procmeter3
Version: 3.4e-1
Tags: patch

Procmeter3 segfaults immediately on startup if /proc/mounts has long
lines.

The function Initialise() in modules/df.c has few buffer overflows
when there are long lines in /proc/mounts: sscanf() is not called with
a proper size arguments on one occasion.

The line[] buffer size is currently 128 which is a bit too small. The
attached patch fixes both the sscanf() format string and the size of
the line[] buffer by extending it to 256 characters.

It might be a good idea to add some functionality to the GUI rendering
of the disk information as well. At the moment, only the initial part
of the mount name is displayed to the user.

$ uname -a
Linux dog 2.6.17-2-686 #1 SMP Wed Sep 13 16:34:10 UTC 2006 i686 GNU/Linux
$ dpkg -s libc6 | grep ^Version
Version: 2.3.6.ds1-8


diff -ru procmeter3-3.4e.orig/modules/df.c procmeter3-3.4e/modules/df.c
--- procmeter3-3.4e.orig/modules/df.c   2005-06-14 20:38:33.000000000 +0300
+++ procmeter3-3.4e/modules/df.c        2006-12-12 10:40:17.000000000 +0200
@@ -95,7 +95,7 @@
 ProcMeterOutput **Initialise(char *options)
 {
  FILE *f;
- char line[128];
+ char line[256];
 
  outputs=(ProcMeterOutput**)malloc(sizeof(ProcMeterOutput*));
  outputs[0]=NULL;
@@ -107,18 +107,18 @@
     fprintf(stderr,"ProcMeter(%s): Could not open '/proc/mounts'.\n",__FILE__);
  else
    {
-    if(!fgets(line,128,f))
+    if(!fgets(line,256,f))
        fprintf(stderr,"ProcMeter(%s): Could not read 
'/proc/mounts'.\n",__FILE__);
     else
        do
          {
-          char device[32],mount[32];
+          char device[65],mount[65];
 
-          if(sscanf(line,"%s %s",device,mount)==2)
+          if(sscanf(line,"%64s %64s",device,mount)==2)
              if(strcmp(mount,"none") && *mount=='/' && (*device=='/' || 
strstr(device, ":/")))
                 add_disk(device,mount);
          }
-       while(fgets(line,128,f));
+       while(fgets(line,256,f));
 
     fclose(f);
    }
@@ -130,21 +130,21 @@
     fprintf(stderr,"ProcMeter(%s): Could not open '/etc/fstab'.\n",__FILE__);
  else
    {
-    if(!fgets(line,128,f))
+    if(!fgets(line,256,f))
        fprintf(stderr,"ProcMeter(%s): Could not read 
'/etc/fstab'.\n",__FILE__);
     else
        do
          {
-          char device[33],mount[33];
+          char device[65],mount[65];
 
           if(*line=='#')
              continue;
 
-          if(sscanf(line,"%32s %32s",device,mount)==2)
+          if(sscanf(line,"%64s %64s",device,mount)==2)
              if(strcmp(mount,"none") && *mount=='/' && (*device=='/' || 
strstr(device, ":/")))
                 add_disk(device,mount);
          }
-       while(fgets(line,128,f));
+       while(fgets(line,256,f));
 
     fclose(f);
    }
@@ -245,7 +245,7 @@
  if(now!=last)
    {
     FILE *f;
-    char line[128];
+    char line[256];
 
     for(i=0;i<ndisks;i++)
        mounted[i]=0;
@@ -255,20 +255,20 @@
        return(-1);
     else
       {
-       if(!fgets(line,128,f))
+       if(!fgets(line,256,f))
           return(-1);
        else
           do
             {
-             char device[32],mount[32];
+             char device[65],mount[65];
 
-             if(sscanf(line,"%s %s",device,mount)==2)
+             if(sscanf(line,"%64s %64s",device,mount)==2)
                 if(strcmp(mount,"none") && *mount=='/' && (*device=='/' || 
strstr(device, ":/")))
                    for(i=0;i<ndisks;i++)
                       if(!strcmp(disk[i],mount))
                          mounted[i]=1;
             }
-          while(fgets(line,128,f));
+          while(fgets(line,256,f));
 
        fclose(f);
       }

-- 
Timo Lilja

"It's a 106 miles to Chicago. We've got a full tank of gas, 
half a pack of cigarettes, it's dark, and we're wearing sunglasses."


--- End Message ---
--- Begin Message ---
Source: procmeter3
Source-Version: 3.4e-2

We believe that the bug you reported is fixed in the latest version of
procmeter3, which is due to be installed in the Debian FTP archive:

procmeter3_3.4e-2.diff.gz
  to pool/main/p/procmeter3/procmeter3_3.4e-2.diff.gz
procmeter3_3.4e-2.dsc
  to pool/main/p/procmeter3/procmeter3_3.4e-2.dsc
procmeter3_3.4e-2_i386.deb
  to pool/main/p/procmeter3/procmeter3_3.4e-2_i386.deb



A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to [EMAIL PROTECTED],
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Joey Hess <[EMAIL PROTECTED]> (supplier of updated procmeter3 package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [EMAIL PROTECTED])


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.7
Date: Tue, 12 Dec 2006 10:28:41 -0500
Source: procmeter3
Binary: procmeter3
Architecture: source i386
Version: 3.4e-2
Distribution: unstable
Urgency: low
Maintainer: Joey Hess <[EMAIL PROTECTED]>
Changed-By: Joey Hess <[EMAIL PROTECTED]>
Description: 
 procmeter3 - graphical system status monitor
Closes: 402719
Changes: 
 procmeter3 (3.4e-2) unstable; urgency=low
 .
   * Patch from Timo Lilja to fix a segfault if /proc/mounts has long lines.
     Closes: #402719
Files: 
 3e0f8e0d83f22df2bbd2d8799ba414ac 719 utils optional procmeter3_3.4e-2.dsc
 4480935d0717dfed631e122251c56e7d 7732 utils optional procmeter3_3.4e-2.diff.gz
 63b778f36a77c0ce987c9ac3329caba4 146366 utils optional 
procmeter3_3.4e-2_i386.deb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFFfsuL2tp5zXiKP0wRAmuaAJ4gGVx3ZOuQseTmhbtqy8tBmg9dkgCeP93Y
77r8rVYk0dyz7JQhTp5fp/Q=
=w7vb
-----END PGP SIGNATURE-----


--- End Message ---

Reply via email to