segfault at 000000000311c000 rip 000000000040fb46rsp 0000007fbffff830 error 4
Carter Bullard
carter at qosient.com
Fri May 29 11:03:28 EDT 2009
Hey Gunnar,
Your problems are so fundamental, crash here, there, everywhere,
all with memory corruption, that it seems clear that you do not
have a standard problem (how could anyone use this software
with these kinds of issues). Some 64-bit machines do weird things,
so..........
Apply this patch and completely rebuild the argus distribution:
*** argus_out.h Wed Feb 25 01:22:20 2009
--- argus_out.h.new Fri May 29 11:00:31 2009
***************
*** 47,60 ****
#include <sys/time.h>
- #if PRAGMA_STRUCT_ALIGN //{
- #pragma options align=packed //{
- #elif PRAGMA_STRUCT_PACKPUSH //}{
- #pragma pack(push, 1)
- #elif PRAGMA_STRUCT_PACK //}{
- #pragma pack(2)
- #endif //}
-
#pragma pack(2)
struct ArgusDSRfixLen {
--- 47,52 ----
So, remove the complete #if PRAGMA_STRUCT_ALIGN declaration.
Then
% make clean;make
And give that argus a try.
Carter
On May 29, 2009, at 9:13 AM, Gunnar Lindberg wrote:
> I'm sorry that this is very incomplete, but it's as far as I got.
> Confusing - or worse. Source code, with line numbers, below.
>
> Before that, however: It seems like Argus is trying to decode packets
> quite extensivly, going into every corner of IP_in_IP_in_IP etc. For
> some usage this is probably what people want. Our usage is much less
> advanced (in that respect) and we'd be quite happy to see that X and Y
> communicated via protocal P (icmp, udp, tcp, ip_51, etc). Has anyone
> thought of the possibility to control such "decoding depths" - like in
> "tcpdump -{q|v}"?
>
>
> May 19 15:25:31 argv kernel: argus[18775]:
> segfault at 0000007fc09ff770 rip 00000000004140b4
> rsp 0000007fbffff5c0 error 6
>
> # gdb argus core.18775
> (gdb) bt
> #0 0x00000000004140b4 in ArgusGetPackets (src=0x2a95786010)
> at ArgusSource.c:2181
> #1 0x0000000000404c77 in main (argc=1, argv=0x7fbffffe08) at argus.c:
> 535
>
> (gdb) print i
> $1 = 1
> (gdb) print found
> $1 = 2
> (gdb) print fd
> $1 = 83886085
> (gdb) print fds
> $2 = {4, 83886085, -1, -1, -1}
>
> So, it seems to be a file descriptor is way out of range and it seems
> likely that FD_SET() may choke on that. Primary question is: Is this
> data modyfied within some internal pcap_fileno() data structure or
> within Argus? "struct ArgusSourceStruct *src" - many bytes...
>
> Boy, I must admit I'm impressed by gdb :-)
>
> (gdb) print *src
> ...
> ArgusInterfaces = 2,
> ...
> src->ArgusInterface[0].ArgusPd == 4
> src->ArgusInterface[0].ArgusCallBack == ArgusEtherPacket()
>
> src->ArgusInterface[1].ArgusPd == 83886085 (0x05000005)
> src->ArgusInterface[1].ArgusCallBack == ArgusEtherPacket()
>
> So, one way or the other we've been able to write into Argus data
> and destroy the file descriptor that was OK some time before (there
> is an identical call to FD_SET() on line 2023 - which we obviously
> survived.
>
> And, at line 2041 we're calling some kind of parser routine; my
> 0.01c is that somewhere in that code a pointer goes haywire. Which
> pointer, how and why remains to be understood. Next week :-)?
>
> Gunnar Lindberg, Chalmers
>
> argus/ArgusSource.c
> 1982 ArgusGetPackets (struct ArgusSourceStruct *src)
> 1983 {
>
> 2023 FD_SET(pcap_fileno(src-
> >ArgusInterface[i].ArgusPd), &ArgusReadMask);
>
> 2041 src->ArgusInterface[0].ArgusCallBack((char
> *)src, header, pkt_data);
>
>
> 2174 for (i = 0; i < src->ArgusInterfaces; i++) {
> 2175 if (src->ArgusInterface[i].ArgusPd && ((fd
> = pcap_fileno(src->ArgusInterface[i].ArgusPd)) >= 0)) {
> 2176 found++;
> 2177 fds[i] = fd;
> 2178
> 2179 if (src->ArgusInterface[i].ifr.ifr_flags
> & IFF_UP) {
> 2180 up++;
> 2181 ===>>> FD_SET(pcap_fileno(src-
> >ArgusInterface[i].ArgusPd), &ArgusReadMask);
> 2182 if (width < pcap_fileno(src-
> >ArgusInterface[i].ArgusPd))
> 2183 width = pcap_fileno(src-
> >ArgusInterface[i].ArgusPd);
> 2184 }
> 2185
> 2186 } else {
>
>
>> From Gunnar.Lindberg at chalmers.se Tue May 19 12:17:45 2009
>> Date: Tue, 19 May 2009 12:17:37 +0200 (MEST)
>> Message-Id: <200905191017.n4JAHbZs007010 at grunert.cdg.chalmers.se>
>> From: Gunnar Lindberg <Gunnar.Lindberg at chalmers.se>
>> To: carter at qosient.com
>> Subject: Re: [ARGUS] segfault at 000000000311c000 rip
>> 000000000040fb46rsp 0000007fbffff830 error 4
>> Cc: argus-info at lists.andrew.cmu.edu, vanepp at sfu.ca
>> In-Reply-To: <C46F56C8-4BD3-4B1E-BAC7-A64E4F0B4145 at qosient.com>
>
>> ...
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3815 bytes
Desc: not available
URL: <https://pairlist1.pair.net/pipermail/argus/attachments/20090529/e6ebdac5/attachment.bin>
More information about the argus
mailing list