On Wed, 01 Oct 2008, Philipp Kern wrote:

> am Wed, Oct 01, 2008 at 12:41:00PM +0200 hast du folgendes geschrieben:
> > irqbalance in etch segfaults when /proc/interrupts contains an interrupt
> > with a number higher than or equal to MAX_INTERRUPTS (256) due to a
> > missing array boundary check.  At least it segfaults reliably on all my
> > hosts (say powell.d.o) that have a line starting in the 500s range.
> > 
> > The version from lenny/backports does not have this issue.  Should we
> > try to fix this in the etch package also?
> 
> looks RC to me.  If it's just a missing boundary check, please add it
> and post the debdiff.  (:

source interdiff looks like this:

diff -u irqbalance-0.12/debian/changelog irqbalance-0.12/debian/changelog
--- irqbalance-0.12/debian/changelog
+++ irqbalance-0.12/debian/changelog
@@ -1,3 +1,15 @@
+irqbalance (0.12-7etch1) stable; urgency=low
+
+  * Non maintainer upload.
+  * irqbalance would segfault on startup when /proc/interrupts contains
+    an interrupt with a number of 256 or larger, since internally it
+    stored data in a fixed-length array.  Newer versions (say 0.55) have
+    replaced the data structure with a list so this is fixed there.  For
+    now we just skip interrupts with such high numbers, since it's the
+    least invasive approach during the stable cycle.
+
+ -- Peter Palfrader <[EMAIL PROTECTED]>  Wed,  1 Oct 2008 15:06:07 +0200
+
 irqbalance (0.12-7) unstable; urgency=low
 
   * debian/po/es.po: Add Spanish translation from César Gómez
only in patch2:
unchanged:
--- irqbalance-0.12.orig/procinterrupts.c
+++ irqbalance-0.12/procinterrupts.c
@@ -103,6 +103,13 @@
                                ret = sscanf(word,"%i",&irqnumber);
                                if (!ret)  /* non numeric end stuff */
                                        irqnumber = MAX_INTERRUPTS-1; 
+                               /* This version of irqbalance cannot handle 
interrups larger
+                                * than 255, so skip stuff right here.  Newer 
versions
+                                * have replaced the length limited array with 
a list,
+                                * so this limitation is no longer present in 
say 0.55.
+                                */
+                               if (irqnumber < 0 || irqnumber >= 
MAX_INTERRUPTS)
+                                       break;
                        /* then N columns of counts, where N is the number of 
cpu's */
                        } else if (column <= cpucount) {
                                sscanf(word,"%lli",&count);


Of course this isn't ideal, since now "high-number" interrupts are just
ignored, and not handled at all.  But it's better than segfaulting.  I
would still like to hear back from the old maintainer, Eric, or the new
maintainer, Kyle, tho.

-- 
                           |  .''`.  ** Debian GNU/Linux **
      Peter Palfrader      | : :' :      The  universal
 http://www.palfrader.org/ | `. `'      Operating System
                           |   `-    http://www.debian.org/


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]




--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to