[ARGUS] Re: Re: 2.0.6.fixes.1 core from improper signal

slif at bellsouth.net slif at bellsouth.net
Thu Nov 11 11:11:55 EST 2004


> From: Carter Bullard <carter at qosient.com>
> I'd like to see if we can make the signal handler's
> a bit more immune to resource problems, so that we can
> have some probability of surviving the system error.

This was my purpose in announcing the problem.  I'm sorry
if my writing did not make this clear.

> 
> So what do you think happened in your case, did argus
> run out of memory?
> 
> Carter

There was plenty of free memory.  The library chain was indeterminate.

I think calloc() was interrupted while it was
adjusting the free memory list.  This adjustment looked
like a corrupt list to free().  If the signal hander
just set a flag and returned, calloc() would have resumed,
and would have completed its changes to the free list.

Here is the evidence:
Line 17 shows the initial signal 20=SIGCHLD on FreeBSD
Note that ArgusChildExit is executing as if it was called
from calloc.  This is because the software interrupt is
still active.

Line 14 is where the problem is manifested.  Free() threw
an abort, probably when it fell off of the incomplete
free list that calloc() was processing.




    1   GNU gdb 5.2.1 (FreeBSD) Copyright 2002 Free Software Foundation, Inc.
    2   [Standard stuff and reading/loading symbols removed for brevity ...]
    3   This GDB was configured as "i386-unknown-freebsd"...
    4   Core was generated by `argus'.
    5   Program terminated with signal 6, Aborted.
    6   #0  0x2811edcf in kill () from /lib/libc.so.5
    7   (gdb) bt
    8   #0  0x2811edcf in kill () from /lib/libc.so.5
    9   #1  0x28113878 in raise () from /lib/libc.so.5
   10   #2  0x2818bf82 in abort () from /lib/libc.so.5
   11   #3  0x2818a6fe in tcflow () from /lib/libc.so.5
   12   #4  0x2818a72b in tcflow () from /lib/libc.so.5
   13   #5  0x2818b459 in free () from /lib/libc.so.5
   14   #6  0x0805e617 in ArgusFree (buf=0x2819a120) at argus_filter.c:5425
   15   #7  0x080529ac in ArgusPopFrontList (list=0x8131160) at ArgusUtil.c:228
   16   #8  0x08050a07 in ArgusCloseSocket (i=1) at ArgusOutput.c:1287
   17   #9  0x0804ef47 in ArgusChildExit (sig=20) at ArgusOutput.c:359
   18   #10 <signal handler called>
   19   #11 0x2818b741 in realloc () from /lib/libc.so.5
   20   #12 0x2818ae1e in tcflow () from /lib/libc.so.5
   21   #13 0x2818af74 in tcflow () from /lib/libc.so.5
   22   #14 0x2818b356 in malloc () from /lib/libc.so.5
   23   #15 0x28187b61 in calloc () from /lib/libc.so.5
   24   #16 0x0805e5f4 in ArgusCalloc (nitems=1, size=12) at argus_filter.c:5410
   25   #17 0x0805395e in ArgusWriteSocket (asock=0x8157000, buf=0x8147780 "\001 ", 
   26       cnt=88) at ArgusUtil.c:977
   27   #18 0x0804ffc3 in ArgusHandleData (asock=0x8146000, buf=0x8147780 "\001 ", 
   28       len=88, client=0x0) at ArgusOutput.c:857
   29   #19 0x080535c6 in ArgusReadSocket (asock=0x8146000, 
   30       ArgusThisHandler=0x804fe88 <ArgusHandleData>, data=0x0) at ArgusUtil.c:847
   31   #20 0x0804f3f3 in ArgusOutputProcess () at ArgusOutput.c:439
   32   #21 0x0804e850 in ArgusInitOutput () at ArgusOutput.c:132
   33   #22 0x0804ac7c in main (argc=1, argv=0xbfbfecb0) at argus.c:421
   34   #23 0x0804a1a2 in _start ()
   35   (gdb) q





More information about the argus mailing list