Hi

My procinfo also segfaults on a machine I run. Apparently there are
two problems:

Third field is skipped if it contains "PIC". However interrupts with
PCI-MSI-edge does *not* fit this pattern, so I had to change line 449
of procinfo.c from:

if ((q = strstr (p, "PIC"))) {

to:

if ((q = strstr (p, "PIC")) || (q = strstr (p, "PCI"))) {

The second problem, which is the reason for the segfault is that my
IRQs for two NICs and a SATA controller is way out of range - 1272,
1273 and 1274. However from /proc/stat is found that there are 498
IRQs (nr_irqs).

I put in the following two lines at line 459 in procinfo.c, just after
the comment:

printf("p=%s, i=%d, nr_irqs=%d\n",p, i, nr_irqs);
fflush(stdout);

I now get when running procinfo (compiled with -g) in gdb:

p=i8042, i=1, nr_irqs=498
p=parport0, i=7, nr_irqs=498
p=rtc, i=8, nr_irqs=498
p=acpi, i=9, nr_irqs=498
p=libata, i=17, nr_irqs=498
p=ehci_hcd:usb1, i=18, nr_irqs=498
p=ehci_hcd:usb2, i=23, nr_irqs=498
p=eth1, i=1272, nr_irqs=498

Program received signal SIGSEGV, Segmentation fault.
0x000000000040595e in first_page (sl=5000000) at procinfo.c:461
461                              if (irq_label[i][0] == 0)

It seems rather clear to me that irq_label is overindexed and the very
high IRQ numbers are the reason for the segfault.

I have not looked into a robust fix yet, though.

Regards
/Rasmus

-- 
Rasmus Bøg Hansen
MSC Aps
Bøgesvinget 8
2740 Skovlunde
44 53 93 66



Reply via email to